Skip to content

Commit

Permalink
dev(scripts): split deployment concerns in multiple files
Browse files Browse the repository at this point in the history
  • Loading branch information
enitrat committed Oct 10, 2024
1 parent 521d141 commit e7be1d6
Show file tree
Hide file tree
Showing 12 changed files with 494 additions and 273 deletions.
13 changes: 8 additions & 5 deletions cairo_zero/tests/src/kakarot/accounts/test_account_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
get_storage_var_address,
)

from kakarot_scripts.constants import ARACHNID_PROXY_DEPLOYER, ARACHNID_PROXY_SIGNED_TX
from kakarot_scripts.constants import PRE_EIP155_TX
from kakarot_scripts.utils.uint256 import int_to_uint256
from tests.utils.constants import CHAIN_ID, TRANSACTIONS
from tests.utils.errors import cairo_error
Expand Down Expand Up @@ -344,9 +344,11 @@ def test_should_raise_with_signature_values_not_in_range(
chain_id=CHAIN_ID,
)

@SyscallHandler.patch("Account_evm_address", int(ARACHNID_PROXY_DEPLOYER, 16))
@SyscallHandler.patch(
"Account_evm_address", int(PRE_EIP155_TX["ArachnidProxy"]["deployer"], 16)
)
def test_should_raise_unauthorized_pre_eip155_tx(self, cairo_run):
rlp_decoded = rlp.decode(ARACHNID_PROXY_SIGNED_TX)
rlp_decoded = rlp.decode(PRE_EIP155_TX["ArachnidProxy"]["signed_tx"])
v, r, s = rlp_decoded[-3:]
signature = [
*int_to_uint256(int.from_bytes(r, "big")),
Expand Down Expand Up @@ -400,7 +402,7 @@ def test_should_raise_invalid_signature_for_invalid_chain_id_when_tx_type0_not_p
lambda _, __: [1, 0x68656C6C6F, 1, 1], # hello
)
def test_pass_authorized_pre_eip155_transaction(self, cairo_run):
rlp_decoded = rlp.decode(ARACHNID_PROXY_SIGNED_TX)
rlp_decoded = rlp.decode(PRE_EIP155_TX["ArachnidProxy"]["signed_tx"])
v, r, s = rlp_decoded[-3:]
signature = [
*int_to_uint256(int.from_bytes(r, "big")),
Expand All @@ -416,7 +418,8 @@ def test_pass_authorized_pre_eip155_transaction(self, cairo_run):

with (
SyscallHandler.patch(
"Account_evm_address", int(ARACHNID_PROXY_DEPLOYER, 16)
"Account_evm_address",
int(PRE_EIP155_TX["ArachnidProxy"]["deployer"], 16),
),
SyscallHandler.patch(
"Account_authorized_message_hashes", tx_hash_low, tx_hash_high, 0x1
Expand Down
39 changes: 26 additions & 13 deletions kakarot_scripts/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -282,19 +282,32 @@ class ChainId(IntEnum):
"UniversalLibraryCaller",
]

# PRE-EIP155 TX
MULTICALL3_DEPLOYER = "0x05f32b3cc3888453ff71b01135b34ff8e41263f2"
MULTICALL3_SIGNED_TX = bytes.fromhex(
json.loads((DATA_DIR / "signed_txs.json").read_text())["multicall3"]
)
ARACHNID_PROXY_DEPLOYER = "0x3fab184622dc19b6109349b94811493bf2a45362"
ARACHNID_PROXY_SIGNED_TX = bytes.fromhex(
json.loads((DATA_DIR / "signed_txs.json").read_text())["arachnid"]
)
CREATEX_DEPLOYER = "0xeD456e05CaAb11d66C4c797dD6c1D6f9A7F352b5"
CREATEX_SIGNED_TX = bytes.fromhex(
json.loads((DATA_DIR / "signed_txs.json").read_text())["createx"]
)
PRE_EIP155_TX = {
"MULTICALL3": {
"deployer": "0x05f32b3cc3888453ff71b01135b34ff8e41263f2",
"signed_tx": bytes.fromhex(
json.loads((DATA_DIR / "signed_txs.json").read_text())["multicall3"]
),
"address": "0xcA11bde05977b3631167028862bE2a173976CA11",
"required_eth": 0.1,
},
"ArachnidProxy": {
"deployer": "0x3fab184622dc19b6109349b94811493bf2a45362",
"signed_tx": bytes.fromhex(
json.loads((DATA_DIR / "signed_txs.json").read_text())["arachnid"]
),
"address": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
"required_eth": 0.1,
},
"CreateX": {
"deployer": "0xeD456e05CaAb11d66C4c797dD6c1D6f9A7F352b5",
"signed_tx": bytes.fromhex(
json.loads((DATA_DIR / "signed_txs.json").read_text())["createx"]
),
"address": "0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed",
"required_eth": 0.3,
},
}

EVM_PRIVATE_KEY = os.getenv("EVM_PRIVATE_KEY")
EVM_ADDRESS = (
Expand Down
220 changes: 0 additions & 220 deletions kakarot_scripts/deploy_kakarot.py

This file was deleted.

8 changes: 8 additions & 0 deletions kakarot_scripts/deployment/declarations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from kakarot_scripts.constants import DECLARED_CONTRACTS
from kakarot_scripts.utils.starknet import declare, dump_declarations


async def declare_contracts():
class_hash = {contract: await declare(contract) for contract in DECLARED_CONTRACTS}
dump_declarations(class_hash)
return class_hash
75 changes: 75 additions & 0 deletions kakarot_scripts/deployment/evm_deployments.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import logging

from kakarot_scripts.constants import EVM_ADDRESS, NETWORK, RPC_CLIENT, NetworkType
from kakarot_scripts.utils.kakarot import deploy as deploy_evm
from kakarot_scripts.utils.kakarot import deploy_and_fund_evm_address
from kakarot_scripts.utils.kakarot import dump_deployments as dump_evm_deployments
from kakarot_scripts.utils.kakarot import get_deployments as get_evm_deployments
from kakarot_scripts.utils.starknet import call, invoke

logger = logging.getLogger(__name__)


async def deploy_evm_contracts():
if not EVM_ADDRESS:
logger.info("ℹ️ No EVM address provided, skipping EVM deployments")
return

logger.info(f"ℹ️ Using account {EVM_ADDRESS} as deployer")

await deploy_and_fund_evm_address(
EVM_ADDRESS, amount=100 if NETWORK["type"] is NetworkType.DEV else 0.01
)

evm_deployments = get_evm_deployments()

coinbase = (await call("kakarot", "get_coinbase")).coinbase
if evm_deployments.get("Bridge", {}).get("address") != coinbase:
bridge = await deploy_evm("CairoPrecompiles", "EthStarknetBridge")
evm_deployments["Bridge"] = {
"address": int(bridge.address, 16),
"starknet_address": bridge.starknet_address,
}
await invoke(
"kakarot",
"set_authorized_cairo_precompile_caller",
int(bridge.address, 16),
1,
)
await invoke("kakarot", "set_coinbase", int(bridge.address, 16))

coinbase = (await call("kakarot", "get_coinbase")).coinbase
if coinbase == 0:
logger.error("❌ Coinbase is set to 0, all transaction fees will be lost")
else:
logger.info(f"✅ Coinbase set to: 0x{coinbase:040x}")

weth_starknet_address = (
await call(
"kakarot",
"get_starknet_address",
evm_deployments.get("WETH", {}).get("address", 0),
)
).starknet_address
if evm_deployments.get("WETH", {}).get("starknet_address") != weth_starknet_address:
weth = await deploy_evm("WETH", "WETH9")
evm_deployments["WETH"] = {
"address": int(weth.address, 16),
"starknet_address": weth.starknet_address,
}

dump_evm_deployments(evm_deployments)


if __name__ == "__main__":
from uvloop import run

async def main():
try:
await RPC_CLIENT.get_class_hash_at(get_evm_deployments()["kakarot"])
except Exception:
logger.error("❌ Kakarot is not deployed, exiting...")
return
await deploy_evm_contracts()

run(main())
Loading

0 comments on commit e7be1d6

Please sign in to comment.