diff --git a/run-dev-node.sh b/run-dev-node.sh index 6336c70..02cd9c2 100755 --- a/run-dev-node.sh +++ b/run-dev-node.sh @@ -2,6 +2,12 @@ NITRO_NODE_VERSION="v3.5.5-90ee45c" # <-- only update this when you need a new version TARGET_IMAGE="offchainlabs/nitro-node:${NITRO_NODE_VERSION}" + +RPC=http://127.0.0.1:8547 +PRIVATE_KEY=0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659 +CREATE2_FACTORY=0x4e59b44847b379578588920ca78fbf26c0b4956c +SALT=0x0000000000000000000000000000000000000000000000000000000000000000 + # By default, use nitro docker image. If "--stylus" is passed, build the image with stylus dev dependencies STYLUS_MODE="false" @@ -33,12 +39,15 @@ fi echo "Starting Nitro dev node..." docker run --rm --name nitro-dev -p 8547:8547 "${TARGET_IMAGE}" --dev --http.addr 0.0.0.0 --http.api=net,web3,eth,debug & +# Kill background processes when exiting +trap 'kill $(jobs -p) 2>/dev/null' EXIT + # Wait for the node to initialize echo "Waiting for the Nitro node to initialize..." until [[ "$(curl -s -X POST -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":1}' \ - http://127.0.0.1:8547)" == *"result"* ]]; do + $RPC)" == *"result"* ]]; do sleep 0.1 done @@ -46,7 +55,7 @@ done # Check if node is running curl_output=$(curl -s -X POST -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":1}' \ - http://127.0.0.1:8547) + $RPC) if [[ "$curl_output" == *"result"* ]]; then echo "Nitro node is running!" @@ -58,13 +67,26 @@ fi # Make the caller a chain owner echo "Setting chain owner to pre-funded dev account..." cast send 0x00000000000000000000000000000000000000FF "becomeChainOwner()" \ - --private-key 0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659 \ - --rpc-url http://127.0.0.1:8547 + --private-key $PRIVATE_KEY \ + --rpc-url $RPC + +# Set the L1 data fee to 0 so it doesn't impact the L2 Gas limit. +# This makes the gas estimates closer to Ethereum and allows the deployment of the CREATE2 factory +cast send -r $RPC --private-key $PRIVATE_KEY 0x0000000000000000000000000000000000000070 'setL1PricePerUnit(uint256)' 0x0 + +# Deploy CREATE2 factory +echo "Deploying the CREATE2 factory" +cast send --rpc-url $RPC --private-key $PRIVATE_KEY --value "1 ether" 0x3fab184622dc19b6109349b94811493bf2a45362 +cast publish --rpc-url $RPC 0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222 +if [ "$(cast code -r $RPC $CREATE2_FACTORY)" == "0x" ]; then + echo "Failed to deploy CREATE2 factory" + exit 1 +fi # Deploy Cache Manager Contract echo "Deploying Cache Manager contract..." -deploy_output=$(cast send --private-key 0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659 \ - --rpc-url http://127.0.0.1:8547 \ +deploy_output=$(cast send --private-key $PRIVATE_KEY \ + --rpc-url $RPC \ --create 0x60a06040523060805234801561001457600080fd5b50608051611d1c61003060003960006105260152611d1c6000f3fe) # Extract contract address using awk from plain text output @@ -81,8 +103,8 @@ echo "Cache Manager contract deployed at address: $contract_address" # Register the deployed Cache Manager contract echo "Registering Cache Manager contract as a WASM cache manager..." -registration_output=$(cast send --private-key 0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659 \ - --rpc-url http://127.0.0.1:8547 \ +registration_output=$(cast send --private-key $PRIVATE_KEY \ + --rpc-url $RPC \ 0x0000000000000000000000000000000000000070 \ "addWasmCacheManager(address)" "$contract_address") @@ -95,13 +117,12 @@ fi echo "Cache Manager deployed and registered successfully" # Deploy StylusDeployer -deployer_output=$(cast send --private-key 0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659 \ - --rpc-url http://127.0.0.1:8547 \ - --create $(cat ./stylus-deployer-bytecode.txt)) -deployer_address=$(echo "$deployer_output" | awk '/contractAddress/ {print $2}') -if [[ -z "$deployer_address" ]]; then - echo "Error: Failed to deploy StylusDeployer contract. Full output:" - echo "$deployer_output" +deployer_code=$(cat ./stylus-deployer-bytecode.txt) +deployer_address=$(cast create2 --salt $SALT --init-code $deployer_code) +cast send --private-key $PRIVATE_KEY --rpc-url $RPC \ + $CREATE2_FACTORY "$SALT$deployer_code" +if [ "$(cast code -r $RPC $deployer_address)" == "0x" ]; then + echo "Failed to deploy StylusDeployer" exit 1 fi echo "StylusDeployer deployed at address: $deployer_address" diff --git a/stylus-deployer-bytecode.txt b/stylus-deployer-bytecode.txt index f273bc1..4717d54 100644 --- a/stylus-deployer-bytecode.txt +++ b/stylus-deployer-bytecode.txt @@ -1 +1 @@ -0x608060405234801561001057600080fd5b506108a8806100206000396000f3fe6080604052600436106100345760003560e01c8063835d1d4c146100395780639f40b3851461006e578063a9a8e4e91461009c575b600080fd5b34801561004557600080fd5b50610059610054366004610612565b6100d4565b60405190151581526020015b60405180910390f35b34801561007a57600080fd5b5061008e610089366004610691565b6101f0565b604051908152602001610065565b6100af6100aa3660046106dd565b610226565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610065565b6040517fd70c0ca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82163f6004820152600090819060719063d70c0ca790602401602060405180830381865afa925050508015610161575060408051601f3d908101601f1916820190925261015e91810190610772565b60015b61016d57506000610170565b90505b607173ffffffffffffffffffffffffffffffffffffffff1663a996e0c26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e09190610772565b61ffff9182169116141592915050565b600083838360405160200161020793929190610794565b6040516020818303038152906040528051906020012090509392505050565b6000811561023c576102398286866101f0565b91505b600061027f88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250610541915050565b9050600061028c826100d4565b90506000811561033c5760006102a287346107ae565b6040517f58c780c200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201529091506071906358c780c2908390602401604080518083038185885af1158015610312573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061033791906107e8565b925050505b861561040c5760008373ffffffffffffffffffffffffffffffffffffffff16878a8a60405161036c929190610814565b60006040518083038185875af1925050503d80600081146103a9576040519150601f19603f3d011682016040523d82523d6000602084013e6103ae565b606091505b5050905080610406576040517fb66f7a3600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024015b60405180910390fd5b50610443565b8515610443576040517ecc797100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008661045083346107ae565b61045a91906107ae565b905080156104e957604051600090339083908381818185875af1925050503d80600081146104a4576040519150601f19603f3d011682016040523d82523d6000602084013e6104a9565b606091505b50509050806104e7576040517f3ea99169000000000000000000000000000000000000000000000000000000008152600481018390526024016103fd565b505b60405173ffffffffffffffffffffffffffffffffffffffff851681527f8ffcdc15a283d706d38281f500270d8b5a656918f555de0913d7455e3e6bc1bf9060200160405180910390a150919998505050505050505050565b6000825160000361057e576040517f21744a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821561059757828451602086016000f590506105a3565b8351602085016000f090505b3d1519811516156105ba576040513d6000823e3d81fd5b73ffffffffffffffffffffffffffffffffffffffff811661060957836040517f794c92ce0000000000000000000000000000000000000000000000000000000081526004016103fd9190610824565b90505b92915050565b60006020828403121561062457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461060957600080fd5b60008083601f84011261065a57600080fd5b50813567ffffffffffffffff81111561067257600080fd5b60208301915083602082850101111561068a57600080fd5b9250929050565b6000806000604084860312156106a657600080fd5b83359250602084013567ffffffffffffffff8111156106c457600080fd5b6106d086828701610648565b9497909650939450505050565b600080600080600080608087890312156106f657600080fd5b863567ffffffffffffffff8082111561070e57600080fd5b61071a8a838b01610648565b9098509650602089013591508082111561073357600080fd5b5061074089828a01610648565b979a9699509760408101359660609091013595509350505050565b805161ffff8116811461076d57600080fd5b919050565b60006020828403121561078457600080fd5b61078d8261075b565b9392505050565b838152818360208301376000910160200190815292915050565b8181038181111561060c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080604083850312156107fb57600080fd5b6108048361075b565b9150602083015190509250929050565b8183823760009101908152919050565b600060208083528351808285015260005b8181101561085157858101830151858201604001528201610835565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212204448eb93d09c22a334820f79d39cc9a956fda57bbb8faa630df7c3446577503064736f6c63430008110033 +608060405234801561001057600080fd5b506108a8806100206000396000f3fe6080604052600436106100345760003560e01c8063835d1d4c146100395780639f40b3851461006e578063a9a8e4e91461009c575b600080fd5b34801561004557600080fd5b50610059610054366004610612565b6100d4565b60405190151581526020015b60405180910390f35b34801561007a57600080fd5b5061008e610089366004610691565b6101f0565b604051908152602001610065565b6100af6100aa3660046106dd565b610226565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610065565b6040517fd70c0ca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82163f6004820152600090819060719063d70c0ca790602401602060405180830381865afa925050508015610161575060408051601f3d908101601f1916820190925261015e91810190610772565b60015b61016d57506000610170565b90505b607173ffffffffffffffffffffffffffffffffffffffff1663a996e0c26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e09190610772565b61ffff9182169116141592915050565b600083838360405160200161020793929190610794565b6040516020818303038152906040528051906020012090509392505050565b6000811561023c576102398286866101f0565b91505b600061027f88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250610541915050565b9050600061028c826100d4565b90506000811561033c5760006102a287346107ae565b6040517f58c780c200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201529091506071906358c780c2908390602401604080518083038185885af1158015610312573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061033791906107e8565b925050505b861561040c5760008373ffffffffffffffffffffffffffffffffffffffff16878a8a60405161036c929190610814565b60006040518083038185875af1925050503d80600081146103a9576040519150601f19603f3d011682016040523d82523d6000602084013e6103ae565b606091505b5050905080610406576040517fb66f7a3600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024015b60405180910390fd5b50610443565b8515610443576040517ecc797100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008661045083346107ae565b61045a91906107ae565b905080156104e957604051600090339083908381818185875af1925050503d80600081146104a4576040519150601f19603f3d011682016040523d82523d6000602084013e6104a9565b606091505b50509050806104e7576040517f3ea99169000000000000000000000000000000000000000000000000000000008152600481018390526024016103fd565b505b60405173ffffffffffffffffffffffffffffffffffffffff851681527f8ffcdc15a283d706d38281f500270d8b5a656918f555de0913d7455e3e6bc1bf9060200160405180910390a150919998505050505050505050565b6000825160000361057e576040517f21744a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821561059757828451602086016000f590506105a3565b8351602085016000f090505b3d1519811516156105ba576040513d6000823e3d81fd5b73ffffffffffffffffffffffffffffffffffffffff811661060957836040517f794c92ce0000000000000000000000000000000000000000000000000000000081526004016103fd9190610824565b90505b92915050565b60006020828403121561062457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461060957600080fd5b60008083601f84011261065a57600080fd5b50813567ffffffffffffffff81111561067257600080fd5b60208301915083602082850101111561068a57600080fd5b9250929050565b6000806000604084860312156106a657600080fd5b83359250602084013567ffffffffffffffff8111156106c457600080fd5b6106d086828701610648565b9497909650939450505050565b600080600080600080608087890312156106f657600080fd5b863567ffffffffffffffff8082111561070e57600080fd5b61071a8a838b01610648565b9098509650602089013591508082111561073357600080fd5b5061074089828a01610648565b979a9699509760408101359660609091013595509350505050565b805161ffff8116811461076d57600080fd5b919050565b60006020828403121561078457600080fd5b61078d8261075b565b9392505050565b838152818360208301376000910160200190815292915050565b8181038181111561060c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080604083850312156107fb57600080fd5b6108048361075b565b9150602083015190509250929050565b8183823760009101908152919050565b600060208083528351808285015260005b8181101561085157858101830151858201604001528201610835565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212204448eb93d09c22a334820f79d39cc9a956fda57bbb8faa630df7c3446577503064736f6c63430008110033