diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..1cfa4b2 --- /dev/null +++ b/.env.example @@ -0,0 +1,29 @@ +# Stargate V2 Endpoints +STARGATE_ENDPOINT_ETHEREUM=0x1a44076050125825900e736c501f859c50fE728c +STARGATE_ENDPOINT_BASE=0x1a44076050125825900e736c501f859c50fE728c +STARGATE_ENDPOINT_BSC=0x1a44076050125825900e736c501f859c50fE728c +STARGATE_ENDPOINT_AVALANCHE=0x1a44076050125825900e736c501f859c50fE728c +STARGATE_ENDPOINT_POLYGON=0x1a44076050125825900e736c501f859c50fE728c +STARGATE_ENDPOINT_ARBITRUM=0x1a44076050125825900e736c501f859c50fE728c +STARGATE_ENDPOINT_OPTIMISM=0x1a44076050125825900e736c501f859c50fE728c + +# RPC Endpoints +ETHEREUM_RPC_URL= +OPTIMISM_RPC_URL= +BASE_RPC_URL= +BSC_RPC_URL= +AVALANCHE_RPC_URL= +POLYGON_RPC_URL= +ARBITRUM_RPC_URL= + +# Etherscan API Keys +ETHEREUM_SCAN_API_KEY= +OPTIMISM_SCAN_API_KEY= +BASE_SCAN_API_KEY= +BSC_SCAN_API_KEY= +# AVALANCHE_SCAN_API_KEY= +POLYGON_SCAN_API_KEY= +ARBITRUM_SCAN_API_KEY= + +# Private Key for Deployment +PRIVATE_KEY= diff --git a/.github/workflows/test.yml b/.github/workflows/ci.yml similarity index 62% rename from .github/workflows/test.yml rename to .github/workflows/ci.yml index 53b33ce..1bfa379 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,10 @@ -name: test +name: Build -on: workflow_dispatch +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] env: FOUNDRY_PROFILE: ci @@ -19,13 +23,13 @@ jobs: with: version: nightly - - name: Run Forge build + - name: Forge build run: | forge --version forge build --sizes id: build - - name: Run Forge tests - run: | - forge test -vvv --rpc-url ${{ secrets.BSC_RPC_URL }} - id: test + # - name: Forge tests + # run: | + # forge test -vvv --rpc-url ${{ secrets.BSC_RPC_URL }} + # id: test diff --git a/.gitignore b/.gitignore index 50e3a5d..4d40390 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,10 @@ # Compiler files cache/ out/ +zkout/ # Ignores development broadcast logs -!/broadcast +broadcast/ /broadcast/*/31337/ /broadcast/**/dry-run/ diff --git a/.gitmodules b/.gitmodules index 37625e2..2af34ae 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,15 @@ -[submodule "bsc/hub_reader/lib/forge-std"] - path = bsc/hub_reader/lib/forge-std +[submodule "lib/forge-std"] + path = lib/forge-std url = https://github.com/foundry-rs/forge-std +[submodule "lib/openzeppelin-contracts"] + path = lib/openzeppelin-contracts + url = https://github.com/OpenZeppelin/openzeppelin-contracts +[submodule "lib/layerzero-v2"] + path = lib/layerzero-v2 + url = https://github.com/LayerZero-Labs/layerzero-v2 +[submodule "lib/stargate-v2"] + path = lib/stargate-v2 + url = https://github.com/stargate-protocol/stargate-v2 +[submodule "lib/solidity-bytes-utils"] + path = lib/solidity-bytes-utils + url = https://github.com/GNSPS/solidity-bytes-utils diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..da9782c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "editor.formatOnSave": true, + "solidity.formatter": "forge", +} \ No newline at end of file diff --git a/README.md b/README.md index b03859f..6483d13 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,13 @@ A collection of smart contracts for Gem Wallet. -- [bsc/hub_reader](bsc/hub_reader): A contract that simplify interacting with BSC Staking Hub +- [src/hub_reader](src/hub_reader): A contract that simplify interacting with BSC Staking Hub +- [src/stargate](src/stargate): A contract that allow to do onchain calls on destination chain after Stargate Bridge ## Development 1. Install [Foundry](https://book.getfoundry.sh/) and you're good to go. -2. Configure `.env` file with your `BSC_RPC_URL` and `BSCSCAN_API_KEY`, if you need to deploy the contract, you need to set `PRIVATE_KEY` as well. +2. Configure `.env` using `.env.example` rpcs (if needed) and etherscan values, if you need to deploy the contract, you need to set `PRIVATE_KEY` as well. ## Usage @@ -27,6 +28,20 @@ forge test --rpc-url ```shell # deploy hub_reader -cd bsc/hub_reader -forge script script/HubReader.s.sol:HubReaderScript --rpc-url "$BSC_RPC_URL" --broadcast --verify -vvvv +just deploy-hub-reader ``` + +```shell +# deploy stargate to all supported chains +just deploy-stargate +``` + +```shell +# deploy stargate to specific chain +just deploy-stargate optimism +``` + + + + + diff --git a/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715346908.json b/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715346908.json deleted file mode 100644 index dca0258..0000000 --- a/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715346908.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xe4d9b5426cb008ae07fe6adaf75cb6bcd759a98e4ded4222320671ba50508c4a", - "transactionType": "CREATE", - "contractName": "HubReader", - "contractAddress": "0xbf3ff1c45b88e9dd65e751e6f3d3e38f139ee690", - "function": null, - "arguments": null, - "transaction": { - "from": "0xba1b98d95ecc9158de3a8a3f38d2c22884886e62", - "gas": "0xfea5c", - "value": "0x0", - "input": "0x6080604052348015600f57600080fd5b50600080546001600160a01b031916612002179055610d26806100336000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806334c2d77e146100465780635ee659451461006f578063ced0e70e1461009a575b600080fd5b61005961005436600461075c565b6100ba565b60405161006691906107b3565b60405180910390f35b600054610082906001600160a01b031681565b6040516001600160a01b039091168152602001610066565b6100ad6100a836600461088b565b610458565b60405161006691906108d0565b600080546040516305ff817160e51b815261ffff8086166004830152841660248201526060929182916001600160a01b039091169063bff02e2090604401600060405180830381865afa158015610115573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261013d9190810190610a2b565b925050915060008461ffff168210610159578461ffff1661015b565b815b90506000816001600160401b0381111561017757610177610935565b6040519080825280602002602001820160405280156101ca57816020015b604080516080810182526000808252602080830182905260609383018490529282015282526000199092019101816101955790505b50905060005b8281101561044d576000805486516001600160a01b039091169063cbb04d9d9088908590811061020257610202610a97565b60200260200101516040518263ffffffff1660e01b815260040161023591906001600160a01b0391909116815260200190565b606060405180830381865afa158015610252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102769190610aad565b506000805489519294509092506001600160a01b03169063a43569b3908990869081106102a5576102a5610a97565b60200260200101516040518263ffffffff1660e01b81526004016102d891906001600160a01b0391909116815260200190565b600060405180830381865afa1580156102f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261031d9190810190610b56565b905060008060009054906101000a90046001600160a01b03166001600160a01b0316636ec01b2789868151811061035657610356610a97565b60200260200101516040518263ffffffff1660e01b815260040161038991906001600160a01b0391909116815260200190565b606060405180830381865afa1580156103a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ca9190610c45565b905060405180608001604052808986815181106103e9576103e9610a97565b60200260200101516001600160a01b0316815260200184151581526020018360000151815260200182600001516001600160401b031681525085858151811061043457610434610a97565b60200260200101819052505050508060010190506101d0565b509695505050505050565b600080546040516305ff817160e51b815261ffff80861660048301528416602482015260609291829182916001600160a01b03169063bff02e2090604401600060405180830381865afa1580156104b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104db9190810190610a2b565b92509250925060008561ffff1682106104f8578561ffff166104fa565b815b9050600080826001600160401b0381111561051757610517610935565b60405190808252806020026020018201604052801561056257816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816105355790505b50905060005b8381101561068357600086828151811061058457610584610a97565b6020908102919091010151604051630913db4760e01b81526001600160a01b038e81166004830152919250600091831690630913db4790602401602060405180830381865afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff9190610cb0565b905080156106795760405180606001604052808e6001600160a01b031681526020018a858151811061063357610633610a97565b60200260200101516001600160a01b031681526020018281525084868151811061065f5761065f610a97565b6020026020010181905250848061067590610cc9565b9550505b5050600101610568565b506000826001600160401b0381111561069e5761069e610935565b6040519080825280602002602001820160405280156106e957816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816106bc5790505b50905060005b838110156107365782818151811061070957610709610a97565b602002602001015182828151811061072357610723610a97565b60209081029190910101526001016106ef565b509a9950505050505050505050565b803561ffff8116811461075757600080fd5b919050565b6000806040838503121561076f57600080fd5b61077883610745565b915061078660208401610745565b90509250929050565b60005b838110156107aa578181015183820152602001610792565b50506000910152565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561086557888303603f19018552815180516001600160a01b0316845287810151151588850152868101516080888601819052815190860181905260a0919061082d81848901848e0161078f565b6060938401516001600160401b0316938701939093525095880195601f91909101601f191690930190920191908601906001016107dc565b509098975050505050505050565b6001600160a01b038116811461088857600080fd5b50565b6000806000606084860312156108a057600080fd5b83356108ab81610873565b92506108b960208501610745565b91506108c760408501610745565b90509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561092857815180516001600160a01b03908116865287820151168786015285015185850152606090930192908501906001016108ed565b5091979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561096d5761096d610935565b60405290565b604051601f8201601f191681016001600160401b038111828210171561099b5761099b610935565b604052919050565b600082601f8301126109b457600080fd5b815160206001600160401b038211156109cf576109cf610935565b8160051b6109de828201610973565b92835284810182019282810190878511156109f857600080fd5b83870192505b84831015610a20578251610a1181610873565b825291830191908301906109fe565b979650505050505050565b600080600060608486031215610a4057600080fd5b83516001600160401b0380821115610a5757600080fd5b610a63878388016109a3565b94506020860151915080821115610a7957600080fd5b50610a86868287016109a3565b925050604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600080600060608486031215610ac257600080fd5b8351925060208401518015158114610ad957600080fd5b80925050604084015190509250925092565b600082601f830112610afc57600080fd5b81516001600160401b03811115610b1557610b15610935565b610b28601f8201601f1916602001610973565b818152846020838601011115610b3d57600080fd5b610b4e82602083016020870161078f565b949350505050565b600060208284031215610b6857600080fd5b81516001600160401b0380821115610b7f57600080fd5b9083019060808286031215610b9357600080fd5b610b9b61094b565b825182811115610baa57600080fd5b610bb687828601610aeb565b825250602083015182811115610bcb57600080fd5b610bd787828601610aeb565b602083015250604083015182811115610bef57600080fd5b610bfb87828601610aeb565b604083015250606083015182811115610c1357600080fd5b610c1f87828601610aeb565b60608301525095945050505050565b80516001600160401b038116811461075757600080fd5b600060608284031215610c5757600080fd5b604051606081018181106001600160401b0382111715610c7957610c79610935565b604052610c8583610c2e565b8152610c9360208401610c2e565b6020820152610ca460408401610c2e565b60408201529392505050565b600060208284031215610cc257600080fd5b5051919050565b600060018201610ce957634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220c567aaa4dc66d37ad7a7facf69f869315e016062aa584d24452c78d59302a58c64736f6c63430008190033", - "nonce": "0x1", - "chainId": "0x38" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0xbc2886", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x0", - "transactionHash": "0xe4d9b5426cb008ae07fe6adaf75cb6bcd759a98e4ded4222320671ba50508c4a", - "transactionIndex": "0x6c", - "blockHash": "0x0e6105d4dddbeeab26f4cec45c3f8a59043b1cf1ac3d96738a8c1d703ae063f2", - "blockNumber": "0x24d00b2", - "gasUsed": "0xc3ef6", - "effectiveGasPrice": "0x3b9aca00", - "from": "0xba1b98d95ecc9158de3a8a3f38d2c22884886e62", - "to": null, - "contractAddress": "0xbf3ff1c45b88e9dd65e751e6f3d3e38f139ee690" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1715346908, - "chain": 56, - "commit": "de03aee" -} \ No newline at end of file diff --git a/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715388304.json b/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715388304.json deleted file mode 100644 index 2ad924e..0000000 --- a/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715388304.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x5c684b738b1c79ce784e44e04719f027d87cbe6685fc910deb3e7f1d2aa7ef39", - "transactionType": "CREATE", - "contractName": "HubReader", - "contractAddress": "0x5d38d16f084e2e3bddede45e5d87db249c123f86", - "function": null, - "arguments": null, - "transaction": { - "from": "0xba1b98d95ecc9158de3a8a3f38d2c22884886e62", - "gas": "0xf22f7", - "value": "0x0", - "input": "0x6080604052348015600f57600080fd5b50600080546001600160a01b031916612002179055610c70806100336000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806334c2d77e146100465780635ee659451461006f578063ced0e70e1461009a575b600080fd5b61005961005436600461069d565b6100ba565b60405161006691906106f4565b60405180910390f35b600054610082906001600160a01b031681565b6040516001600160a01b039091168152602001610066565b6100ad6100a83660046107cd565b61044a565b6040516100669190610812565b600080546040516305ff817160e51b815261ffff8086166004830152841660248201526060929182916001600160a01b039091169063bff02e2090604401600060405180830381865afa158015610115573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261013d9190810190610970565b925050915060008461ffff168210610159578461ffff1661015b565b815b905060008167ffffffffffffffff81111561017857610178610877565b6040519080825280602002602001820160405280156101cb57816020015b604080516080810182526000808252602080830182905260609383018490529282015282526000199092019101816101965790505b50905060005b8281101561043f576000805486516001600160a01b039091169063cbb04d9d90889085908110610203576102036109dd565b60200260200101516040518263ffffffff1660e01b815260040161023691906001600160a01b0391909116815260200190565b606060405180830381865afa158015610253573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027791906109f3565b506000805489519294509092506001600160a01b03169063a43569b3908990869081106102a6576102a66109dd565b60200260200101516040518263ffffffff1660e01b81526004016102d991906001600160a01b0391909116815260200190565b600060405180830381865afa1580156102f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261031e9190810190610a9d565b5160008054895192935090916001600160a01b0390911690636ec01b27908a908790811061034e5761034e6109dd565b60200260200101516040518263ffffffff1660e01b815260040161038191906001600160a01b0391909116815260200190565b606060405180830381865afa15801561039e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c29190610b8e565b60000151905060405180608001604052808986815181106103e5576103e56109dd565b60200260200101516001600160a01b0316815260200184151581526020018381526020018267ffffffffffffffff16815250858581518110610429576104296109dd565b60209081029190910101525050506001016101d1565b509695505050505050565b600080546040516305ff817160e51b815261ffff80861660048301528416602482015260609291829182916001600160a01b03169063bff02e2090604401600060405180830381865afa1580156104a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104cd9190810190610970565b92509250925060008561ffff1682106104ea578561ffff166104ec565b815b90506000808267ffffffffffffffff81111561050a5761050a610877565b60405190808252806020026020018201604052801561055557816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816105285790505b50905060005b83811015610676576000868281518110610577576105776109dd565b6020908102919091010151604051630913db4760e01b81526001600160a01b038e81166004830152919250600091831690630913db4790602401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f29190610bfa565b9050801561066c5760405180606001604052808e6001600160a01b031681526020018a8581518110610626576106266109dd565b60200260200101516001600160a01b0316815260200182815250848681518110610652576106526109dd565b6020026020010181905250848061066890610c13565b9550505b505060010161055b565b5090815298975050505050505050565b803561ffff8116811461069857600080fd5b919050565b600080604083850312156106b057600080fd5b6106b983610686565b91506106c760208401610686565b90509250929050565b60005b838110156106eb5781810151838201526020016106d3565b50506000910152565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156107a757888303603f19018552815180516001600160a01b0316845287810151151588850152868101516080888601819052815190860181905260a0919061076e81848901848e016106d0565b60609384015167ffffffffffffffff16938701939093525095880195601f91909101601f1916909301909201919086019060010161071d565b509098975050505050505050565b6001600160a01b03811681146107ca57600080fd5b50565b6000806000606084860312156107e257600080fd5b83356107ed816107b5565b92506107fb60208501610686565b915061080960408501610686565b90509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561086a57815180516001600160a01b039081168652878201511687860152850151858501526060909301929085019060010161082f565b5091979650505050505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156108b0576108b0610877565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108df576108df610877565b604052919050565b600082601f8301126108f857600080fd5b8151602067ffffffffffffffff82111561091457610914610877565b8160051b6109238282016108b6565b928352848101820192828101908785111561093d57600080fd5b83870192505b84831015610965578251610956816107b5565b82529183019190830190610943565b979650505050505050565b60008060006060848603121561098557600080fd5b835167ffffffffffffffff8082111561099d57600080fd5b6109a9878388016108e7565b945060208601519150808211156109bf57600080fd5b506109cc868287016108e7565b925050604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600080600060608486031215610a0857600080fd5b8351925060208401518015158114610a1f57600080fd5b80925050604084015190509250925092565b600082601f830112610a4257600080fd5b815167ffffffffffffffff811115610a5c57610a5c610877565b610a6f601f8201601f19166020016108b6565b818152846020838601011115610a8457600080fd5b610a958260208301602087016106d0565b949350505050565b600060208284031215610aaf57600080fd5b815167ffffffffffffffff80821115610ac757600080fd5b9083019060808286031215610adb57600080fd5b610ae361088d565b825182811115610af257600080fd5b610afe87828601610a31565b825250602083015182811115610b1357600080fd5b610b1f87828601610a31565b602083015250604083015182811115610b3757600080fd5b610b4387828601610a31565b604083015250606083015182811115610b5b57600080fd5b610b6787828601610a31565b60608301525095945050505050565b805167ffffffffffffffff8116811461069857600080fd5b600060608284031215610ba057600080fd5b6040516060810181811067ffffffffffffffff82111715610bc357610bc3610877565b604052610bcf83610b76565b8152610bdd60208401610b76565b6020820152610bee60408401610b76565b60408201529392505050565b600060208284031215610c0c57600080fd5b5051919050565b600060018201610c3357634e487b7160e01b600052601160045260246000fd5b506001019056fea26469706673582212206118ece81441fae0a66c1155285c80e197c5db67eaad85b76e4948ff79f3913864736f6c63430008190033", - "nonce": "0x2", - "chainId": "0x38" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x5d9fad", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x0", - "transactionHash": "0x5c684b738b1c79ce784e44e04719f027d87cbe6685fc910deb3e7f1d2aa7ef39", - "transactionIndex": "0x34", - "blockHash": "0x2c0fefd7b714392353edbfb332fcfd6a30865c71dc2d968ee37ff8d748750f5c", - "blockNumber": "0x24d367b", - "gasUsed": "0xba58a", - "effectiveGasPrice": "0x3b9aca00", - "from": "0xba1b98d95ecc9158de3a8a3f38d2c22884886e62", - "to": null, - "contractAddress": "0x5d38d16f084e2e3bddede45e5d87db249c123f86" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1715388304, - "chain": 56, - "commit": "7f9d9fc" -} \ No newline at end of file diff --git a/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715647097.json b/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715647097.json deleted file mode 100644 index 250802f..0000000 --- a/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715647097.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x59fb6ac5dd9afb2b22e069dc4047685f3ec2171facbabcd4cca34038692dca82", - "transactionType": "CREATE", - "contractName": "HubReader", - "contractAddress": "0x1c5c7645dab3a1642048af96face6be29952cbf9", - "function": null, - "arguments": null, - "transaction": { - "from": "0xba1b98d95ecc9158de3a8a3f38d2c22884886e62", - "gas": "0x15a321", - "value": "0x0", - "input": "0x6080604052348015600f57600080fd5b50600080546001600160a01b03191661200217905561125e806100336000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806334c2d77e146100515780635ee659451461007a578063cd02cf2e146100a5578063ced0e70e146100c5575b600080fd5b61006461005f366004610a50565b6100e5565b6040516100719190610aa7565b60405180910390f35b60005461008d906001600160a01b031681565b6040516001600160a01b039091168152602001610071565b6100b86100b3366004610c27565b610559565b6040516100719190610ccb565b6100d86100d3366004610d18565b6107fe565b6040516100719190610d5d565b600080546040516305ff817160e51b815261ffff8086166004830152841660248201526060929182916001600160a01b039091169063bff02e2090604401600060405180830381865afa158015610140573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101689190810190610e35565b925050915060008461ffff168210610184578461ffff16610186565b815b90506000816001600160401b038111156101a2576101a2610b7e565b6040519080825280602002602001820160405280156101fc57816020015b6040805160a081018252600080825260208083018290526060938301849052928201819052608082015282526000199092019101816101c05790505b50905060005b8281101561047f576000805486516001600160a01b039091169063cbb04d9d9088908590811061023457610234610ea1565b60200260200101516040518263ffffffff1660e01b815260040161026791906001600160a01b0391909116815260200190565b606060405180830381865afa158015610284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a89190610eb7565b506000805489519294509092506001600160a01b03169063a43569b3908990869081106102d7576102d7610ea1565b60200260200101516040518263ffffffff1660e01b815260040161030a91906001600160a01b0391909116815260200190565b600060405180830381865afa158015610327573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034f9190810190610f60565b5160008054895192935090916001600160a01b0390911690636ec01b27908a908790811061037f5761037f610ea1565b60200260200101516040518263ffffffff1660e01b81526004016103b291906001600160a01b0391909116815260200190565b606060405180830381865afa1580156103cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f3919061104f565b6000015190506040518060a0016040528089868151811061041657610416610ea1565b60200260200101516001600160a01b031681526020018415158152602001838152602001826001600160401b0316815260200160006001600160401b031681525085858151811061046957610469610ea1565b6020908102919091010152505050600101610202565b50604051636681679760e11b8152600090309063cd02cf2e906104a890889042906004016110ba565b600060405180830381865afa1580156104c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104ed9190810190611110565b905060005b8381101561054a5781818151811061050c5761050c610ea1565b602002602001015183828151811061052657610526610ea1565b60209081029190910101516001600160401b039091166080909101526001016104f2565b50909450505050505b92915050565b6000805460408051631fa8882b60e01b81529051606093926001600160a01b031691631fa8882b9160048083019260209291908290030181865afa1580156105a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c991906111a7565b6105d390846111d6565b84519091506000816001600160401b038111156105f2576105f2610b7e565b60405190808252806020026020018201604052801561061b578160200160208202803683370190505b50905060005b828110156107f4576000805488516001600160a01b0390911690638cd22b22908a908590811061065357610653610ea1565b6020026020010151876040518363ffffffff1660e01b815260040161068d9291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa1580156106aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ce91906111a7565b9050806000036106de57506107ec565b6000805489516001600160a01b039091169063f80a3402908b908690811061070857610708610ea1565b6020026020010151886040518363ffffffff1660e01b81526004016107429291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa15801561075f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078391906111a7565b9050806000036107945750506107ec565b816107a18261016d6111f8565b6107ad906127106111f8565b6107b791906111d6565b8484815181106107c9576107c9610ea1565b60200260200101906001600160401b031690816001600160401b03168152505050505b600101610621565b5095945050505050565b600080546040516305ff817160e51b815261ffff80861660048301528416602482015260609291829182916001600160a01b03169063bff02e2090604401600060405180830381865afa158015610859573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108819190810190610e35565b92509250925060008561ffff16821061089e578561ffff166108a0565b815b9050600080826001600160401b038111156108bd576108bd610b7e565b60405190808252806020026020018201604052801561090857816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816108db5790505b50905060005b83811015610a2957600086828151811061092a5761092a610ea1565b6020908102919091010151604051630913db4760e01b81526001600160a01b038e81166004830152919250600091831690630913db4790602401602060405180830381865afa158015610981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a591906111a7565b90508015610a1f5760405180606001604052808e6001600160a01b031681526020018a85815181106109d9576109d9610ea1565b60200260200101516001600160a01b0316815260200182815250848681518110610a0557610a05610ea1565b60200260200101819052508480610a1b9061120f565b9550505b505060010161090e565b5090815298975050505050505050565b803561ffff81168114610a4b57600080fd5b919050565b60008060408385031215610a6357600080fd5b610a6c83610a39565b9150610a7a60208401610a39565b90509250929050565b60005b83811015610a9e578181015183820152602001610a86565b50506000910152565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015610b7057888303603f19018552815180516001600160a01b03168452878101511515888501528681015160a0888601819052815190860181905260c09190610b2181848901848e01610a83565b6060848101516001600160401b031690880152608093840151939150610b51828801856001600160401b03169052565b978a0197601f01601f1916959095010193505090860190600101610ad0565b509098975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715610bb657610bb6610b7e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610be457610be4610b7e565b604052919050565b60006001600160401b03821115610c0557610c05610b7e565b5060051b60200190565b6001600160a01b0381168114610c2457600080fd5b50565b60008060408385031215610c3a57600080fd5b82356001600160401b03811115610c5057600080fd5b8301601f81018513610c6157600080fd5b80356020610c76610c7183610bec565b610bbc565b82815260059290921b83018101918181019088841115610c9557600080fd5b938201935b83851015610cbc578435610cad81610c0f565b82529382019390820190610c9a565b98969091013596505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610d0c5783516001600160401b031683529284019291840191600101610ce7565b50909695505050505050565b600080600060608486031215610d2d57600080fd5b8335610d3881610c0f565b9250610d4660208501610a39565b9150610d5460408501610a39565b90509250925092565b602080825282518282018190526000919060409081850190868401855b82811015610db557815180516001600160a01b0390811686528782015116878601528501518585015260609093019290850190600101610d7a565b5091979650505050505050565b600082601f830112610dd357600080fd5b81516020610de3610c7183610bec565b8083825260208201915060208460051b870101935086841115610e0557600080fd5b602086015b84811015610e2a578051610e1d81610c0f565b8352918301918301610e0a565b509695505050505050565b600080600060608486031215610e4a57600080fd5b83516001600160401b0380821115610e6157600080fd5b610e6d87838801610dc2565b94506020860151915080821115610e8357600080fd5b50610e9086828701610dc2565b925050604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600080600060608486031215610ecc57600080fd5b8351925060208401518015158114610ee357600080fd5b80925050604084015190509250925092565b600082601f830112610f0657600080fd5b81516001600160401b03811115610f1f57610f1f610b7e565b610f32601f8201601f1916602001610bbc565b818152846020838601011115610f4757600080fd5b610f58826020830160208701610a83565b949350505050565b600060208284031215610f7257600080fd5b81516001600160401b0380821115610f8957600080fd5b9083019060808286031215610f9d57600080fd5b610fa5610b94565b825182811115610fb457600080fd5b610fc087828601610ef5565b825250602083015182811115610fd557600080fd5b610fe187828601610ef5565b602083015250604083015182811115610ff957600080fd5b61100587828601610ef5565b60408301525060608301518281111561101d57600080fd5b61102987828601610ef5565b60608301525095945050505050565b80516001600160401b0381168114610a4b57600080fd5b60006060828403121561106157600080fd5b604051606081018181106001600160401b038211171561108357611083610b7e565b60405261108f83611038565b815261109d60208401611038565b60208201526110ae60408401611038565b60408201529392505050565b604080825283519082018190526000906020906060840190828701845b828110156110fc5781516001600160a01b0316845292840192908401906001016110d7565b505050602093909301939093525092915050565b6000602080838503121561112357600080fd5b82516001600160401b0381111561113957600080fd5b8301601f8101851361114a57600080fd5b8051611158610c7182610bec565b81815260059190911b8201830190838101908783111561117757600080fd5b928401925b8284101561119c5761118d84611038565b8252928401929084019061117c565b979650505050505050565b6000602082840312156111b957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000826111f357634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610553576105536111c0565b600060018201611221576112216111c0565b506001019056fea26469706673582212201509be0453eb970bc6069bfd4391f1eaacb85c8feaa3277c9a5f4c03c362460264736f6c63430008190033", - "nonce": "0x3", - "chainId": "0x38" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x5f78e0", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x0", - "transactionHash": "0x59fb6ac5dd9afb2b22e069dc4047685f3ec2171facbabcd4cca34038692dca82", - "transactionIndex": "0x3a", - "blockHash": "0xe5e52fd74e5a23489ffca9b6f329a9af6fdc959c67169b4d211d2b764ad02d5b", - "blockNumber": "0x24e86b3", - "gasUsed": "0x10a609", - "effectiveGasPrice": "0x3b9aca00", - "from": "0xba1b98d95ecc9158de3a8a3f38d2c22884886e62", - "to": null, - "contractAddress": "0x1c5c7645dab3a1642048af96face6be29952cbf9" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1715647097, - "chain": 56, - "commit": "0d763c8" -} \ No newline at end of file diff --git a/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715777314.json b/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715777314.json deleted file mode 100644 index 565e2eb..0000000 --- a/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715777314.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x5c33d86e484c3830b64fc6c1b138863efc93f5c5983421a94b7414b7ec8faa9d", - "transactionType": "CREATE", - "contractName": "HubReader", - "contractAddress": "0xe754ad5e300c81b02dc6583e1612025507ef90f7", - "function": null, - "arguments": null, - "transaction": { - "from": "0xba1b98d95ecc9158de3a8a3f38d2c22884886e62", - "gas": "0x16381c", - "value": "0x0", - "input": "0x6080604052348015600f57600080fd5b50600080546001600160a01b0319166120021790556112e6806100336000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806334c2d77e146100515780635ee659451461007a578063cd02cf2e146100a5578063ced0e70e146100c5575b600080fd5b61006461005f366004610acd565b6100e5565b6040516100719190610b24565b60405180910390f35b60005461008d906001600160a01b031681565b6040516001600160a01b039091168152602001610071565b6100b86100b3366004610ca4565b610559565b6040516100719190610d48565b6100d86100d3366004610d95565b6107fe565b6040516100719190610dda565b600080546040516305ff817160e51b815261ffff8086166004830152841660248201526060929182916001600160a01b039091169063bff02e2090604401600060405180830381865afa158015610140573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101689190810190610ebd565b925050915060008461ffff168210610184578461ffff16610186565b815b90506000816001600160401b038111156101a2576101a2610bfb565b6040519080825280602002602001820160405280156101fc57816020015b6040805160a081018252600080825260208083018290526060938301849052928201819052608082015282526000199092019101816101c05790505b50905060005b8281101561047f576000805486516001600160a01b039091169063cbb04d9d9088908590811061023457610234610f29565b60200260200101516040518263ffffffff1660e01b815260040161026791906001600160a01b0391909116815260200190565b606060405180830381865afa158015610284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a89190610f3f565b506000805489519294509092506001600160a01b03169063a43569b3908990869081106102d7576102d7610f29565b60200260200101516040518263ffffffff1660e01b815260040161030a91906001600160a01b0391909116815260200190565b600060405180830381865afa158015610327573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034f9190810190610fe8565b5160008054895192935090916001600160a01b0390911690636ec01b27908a908790811061037f5761037f610f29565b60200260200101516040518263ffffffff1660e01b81526004016103b291906001600160a01b0391909116815260200190565b606060405180830381865afa1580156103cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f391906110d7565b6000015190506040518060a0016040528089868151811061041657610416610f29565b60200260200101516001600160a01b031681526020018415158152602001838152602001826001600160401b0316815260200160006001600160401b031681525085858151811061046957610469610f29565b6020908102919091010152505050600101610202565b50604051636681679760e11b8152600090309063cd02cf2e906104a89088904290600401611142565b600060405180830381865afa1580156104c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104ed9190810190611198565b905060005b8381101561054a5781818151811061050c5761050c610f29565b602002602001015183828151811061052657610526610f29565b60209081029190910101516001600160401b039091166080909101526001016104f2565b50909450505050505b92915050565b6000805460408051631fa8882b60e01b81529051606093926001600160a01b031691631fa8882b9160048083019260209291908290030181865afa1580156105a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c9919061122f565b6105d3908461125e565b84519091506000816001600160401b038111156105f2576105f2610bfb565b60405190808252806020026020018201604052801561061b578160200160208202803683370190505b50905060005b828110156107f4576000805488516001600160a01b0390911690638cd22b22908a908590811061065357610653610f29565b6020026020010151876040518363ffffffff1660e01b815260040161068d9291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa1580156106aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ce919061122f565b9050806000036106de57506107ec565b6000805489516001600160a01b039091169063f80a3402908b908690811061070857610708610f29565b6020026020010151886040518363ffffffff1660e01b81526004016107429291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa15801561075f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610783919061122f565b9050806000036107945750506107ec565b816107a18261016d611280565b6107ad90612710611280565b6107b7919061125e565b8484815181106107c9576107c9610f29565b60200260200101906001600160401b031690816001600160401b03168152505050505b600101610621565b5095945050505050565b600080546040516305ff817160e51b815261ffff80861660048301528416602482015260609291829182916001600160a01b03169063bff02e2090604401600060405180830381865afa158015610859573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108819190810190610ebd565b92509250925060008561ffff16821061089e578561ffff166108a0565b815b9050600080826001600160401b038111156108bd576108bd610bfb565b60405190808252806020026020018201604052801561090f57816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816108db5790505b50905060005b83811015610aa657600086828151811061093157610931610f29565b60209081029190910101516040516370a0823160e01b81526001600160a01b038e811660048301529192506000918316906370a0823190602401602060405180830381865afa158015610988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ac919061122f565b60405163247ebc2d60e21b8152600481018290529091506000906001600160a01b038416906391faf0b490602401602060405180830381865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b919061122f565b90508015610a9b5760405180608001604052808f6001600160a01b031681526020018b8681518110610a4f57610a4f610f29565b60200260200101516001600160a01b0316815260200182815260200183815250858781518110610a8157610a81610f29565b60200260200101819052508580610a9790611297565b9650505b505050600101610915565b5090815298975050505050505050565b803561ffff81168114610ac857600080fd5b919050565b60008060408385031215610ae057600080fd5b610ae983610ab6565b9150610af760208401610ab6565b90509250929050565b60005b83811015610b1b578181015183820152602001610b03565b50506000910152565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015610bed57888303603f19018552815180516001600160a01b03168452878101511515888501528681015160a0888601819052815190860181905260c09190610b9e81848901848e01610b00565b6060848101516001600160401b031690880152608093840151939150610bce828801856001600160401b03169052565b978a0197601f01601f1916959095010193505090860190600101610b4d565b509098975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715610c3357610c33610bfb565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610c6157610c61610bfb565b604052919050565b60006001600160401b03821115610c8257610c82610bfb565b5060051b60200190565b6001600160a01b0381168114610ca157600080fd5b50565b60008060408385031215610cb757600080fd5b82356001600160401b03811115610ccd57600080fd5b8301601f81018513610cde57600080fd5b80356020610cf3610cee83610c69565b610c39565b82815260059290921b83018101918181019088841115610d1257600080fd5b938201935b83851015610d39578435610d2a81610c8c565b82529382019390820190610d17565b98969091013596505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610d895783516001600160401b031683529284019291840191600101610d64565b50909695505050505050565b600080600060608486031215610daa57600080fd5b8335610db581610c8c565b9250610dc360208501610ab6565b9150610dd160408501610ab6565b90509250925092565b602080825282518282018190526000919060409081850190868401855b82811015610e3d57815180516001600160a01b03908116865287820151168786015285810151868601526060908101519085015260809093019290850190600101610df7565b5091979650505050505050565b600082601f830112610e5b57600080fd5b81516020610e6b610cee83610c69565b8083825260208201915060208460051b870101935086841115610e8d57600080fd5b602086015b84811015610eb2578051610ea581610c8c565b8352918301918301610e92565b509695505050505050565b600080600060608486031215610ed257600080fd5b83516001600160401b0380821115610ee957600080fd5b610ef587838801610e4a565b94506020860151915080821115610f0b57600080fd5b50610f1886828701610e4a565b925050604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600080600060608486031215610f5457600080fd5b8351925060208401518015158114610f6b57600080fd5b80925050604084015190509250925092565b600082601f830112610f8e57600080fd5b81516001600160401b03811115610fa757610fa7610bfb565b610fba601f8201601f1916602001610c39565b818152846020838601011115610fcf57600080fd5b610fe0826020830160208701610b00565b949350505050565b600060208284031215610ffa57600080fd5b81516001600160401b038082111561101157600080fd5b908301906080828603121561102557600080fd5b61102d610c11565b82518281111561103c57600080fd5b61104887828601610f7d565b82525060208301518281111561105d57600080fd5b61106987828601610f7d565b60208301525060408301518281111561108157600080fd5b61108d87828601610f7d565b6040830152506060830151828111156110a557600080fd5b6110b187828601610f7d565b60608301525095945050505050565b80516001600160401b0381168114610ac857600080fd5b6000606082840312156110e957600080fd5b604051606081018181106001600160401b038211171561110b5761110b610bfb565b604052611117836110c0565b8152611125602084016110c0565b6020820152611136604084016110c0565b60408201529392505050565b604080825283519082018190526000906020906060840190828701845b828110156111845781516001600160a01b03168452928401929084019060010161115f565b505050602093909301939093525092915050565b600060208083850312156111ab57600080fd5b82516001600160401b038111156111c157600080fd5b8301601f810185136111d257600080fd5b80516111e0610cee82610c69565b81815260059190911b820183019083810190878311156111ff57600080fd5b928401925b8284101561122457611215846110c0565b82529284019290840190611204565b979650505050505050565b60006020828403121561124157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008261127b57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761055357610553611248565b6000600182016112a9576112a9611248565b506001019056fea2646970667358221220fadcd97385a18b1b06bee208f9da7672e0a6e300d6815fc2d21b427b5a9a447764736f6c63430008190033", - "nonce": "0x4", - "chainId": "0x38" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x1e328e0", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x0", - "transactionHash": "0x5c33d86e484c3830b64fc6c1b138863efc93f5c5983421a94b7414b7ec8faa9d", - "transactionIndex": "0xc2", - "blockHash": "0x237f37bfb2a833da4d649fc752252b883e975c9b740ff96158332cf413c5e71b", - "blockNumber": "0x24f2fea", - "gasUsed": "0x1118aa", - "effectiveGasPrice": "0x3b9aca00", - "from": "0xba1b98d95ecc9158de3a8a3f38d2c22884886e62", - "to": null, - "contractAddress": "0xe754ad5e300c81b02dc6583e1612025507ef90f7" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1715777314, - "chain": 56, - "commit": "0db483f" -} \ No newline at end of file diff --git a/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715823704.json b/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715823704.json deleted file mode 100644 index fd65efb..0000000 --- a/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-1715823704.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x912d9679948068af6dfbd596b7acc131b37657f2dcffd390a6e6cfe258712c62", - "transactionType": "CREATE", - "contractName": "HubReader", - "contractAddress": "0x830295c0abe7358f7e24bc38408095621474280b", - "function": null, - "arguments": null, - "transaction": { - "from": "0xba1b98d95ecc9158de3a8a3f38d2c22884886e62", - "gas": "0x1b67d2", - "value": "0x0", - "input": "0x6080604052348015600f57600080fd5b50600080546001600160a01b0319166120021790556117a1806100336000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806334c2d77e1461005c5780635ee6594514610085578063cd02cf2e146100b0578063ced0e70e146100d0578063d9d4c020146100f0575b600080fd5b61006f61006a366004610ec7565b610110565b60405161007c9190610f1e565b60405180910390f35b600054610098906001600160a01b031681565b6040516001600160a01b03909116815260200161007c565b6100c36100be3660046110c0565b610584565b60405161007c9190611164565b6100e36100de3660046111b1565b610829565b60405161007c91906111f6565b6101036100fe3660046111b1565b610ae1565b60405161007c9190611266565b600080546040516305ff817160e51b815261ffff8086166004830152841660248201526060929182916001600160a01b039091169063bff02e2090604401600060405180830381865afa15801561016b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101939190810190611346565b925050915060008461ffff1682106101af578461ffff166101b1565b815b90506000816001600160401b038111156101cd576101cd610ff5565b60405190808252806020026020018201604052801561022757816020015b6040805160a081018252600080825260208083018290526060938301849052928201819052608082015282526000199092019101816101eb5790505b50905060005b828110156104aa576000805486516001600160a01b039091169063cbb04d9d9088908590811061025f5761025f6113b2565b60200260200101516040518263ffffffff1660e01b815260040161029291906001600160a01b0391909116815260200190565b606060405180830381865afa1580156102af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d391906113c8565b506000805489519294509092506001600160a01b03169063a43569b390899086908110610302576103026113b2565b60200260200101516040518263ffffffff1660e01b815260040161033591906001600160a01b0391909116815260200190565b600060405180830381865afa158015610352573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261037a9190810190611471565b5160008054895192935090916001600160a01b0390911690636ec01b27908a90879081106103aa576103aa6113b2565b60200260200101516040518263ffffffff1660e01b81526004016103dd91906001600160a01b0391909116815260200190565b606060405180830381865afa1580156103fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041e9190611560565b6000015190506040518060a00160405280898681518110610441576104416113b2565b60200260200101516001600160a01b031681526020018415158152602001838152602001826001600160401b0316815260200160006001600160401b0316815250858581518110610494576104946113b2565b602090810291909101015250505060010161022d565b50604051636681679760e11b8152600090309063cd02cf2e906104d390889042906004016115ae565b600060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105189190810190611604565b905060005b8381101561057557818181518110610537576105376113b2565b6020026020010151838281518110610551576105516113b2565b60209081029190910101516001600160401b0390911660809091015260010161051d565b50909450505050505b92915050565b6000805460408051631fa8882b60e01b81529051606093926001600160a01b031691631fa8882b9160048083019260209291908290030181865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f4919061169b565b6105fe90846116ca565b84519091506000816001600160401b0381111561061d5761061d610ff5565b604051908082528060200260200182016040528015610646578160200160208202803683370190505b50905060005b8281101561081f576000805488516001600160a01b0390911690638cd22b22908a908590811061067e5761067e6113b2565b6020026020010151876040518363ffffffff1660e01b81526004016106b89291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa1580156106d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f9919061169b565b9050806000036107095750610817565b6000805489516001600160a01b039091169063f80a3402908b9086908110610733576107336113b2565b6020026020010151886040518363ffffffff1660e01b815260040161076d9291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae919061169b565b9050806000036107bf575050610817565b816107cc8261016d6116ec565b6107d8906127106116ec565b6107e291906116ca565b8484815181106107f4576107f46113b2565b60200260200101906001600160401b031690816001600160401b03168152505050505b60010161064c565b5095945050505050565b600080546040516305ff817160e51b815261ffff80861660048301528416602482015260609291829182916001600160a01b03169063bff02e2090604401600060405180830381865afa158015610884573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108ac9190810190611346565b92509250925060008561ffff1682106108c9578561ffff166108cb565b815b9050600080826001600160401b038111156108e8576108e8610ff5565b60405190808252806020026020018201604052801561093a57816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816109065790505b50905060005b83811015610ad157600086828151811061095c5761095c6113b2565b60209081029190910101516040516370a0823160e01b81526001600160a01b038e811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d7919061169b565b60405163247ebc2d60e21b8152600481018290529091506000906001600160a01b038416906391faf0b490602401602060405180830381865afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a46919061169b565b90508015610ac65760405180608001604052808f6001600160a01b031681526020018b8681518110610a7a57610a7a6113b2565b60200260200101516001600160a01b0316815260200182815260200183815250858781518110610aac57610aac6113b2565b60200260200101819052508580610ac290611703565b9650505b505050600101610940565b5090815298975050505050505050565b600080546040516305ff817160e51b815261ffff80861660048301528416602482015260609291829182916001600160a01b03169063bff02e2090604401600060405180830381865afa158015610b3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b649190810190611346565b92509250925060008561ffff168210610b81578561ffff16610b83565b815b90506000805b82811015610c2d57848181518110610ba357610ba36113b2565b602090810291909101015160405163038c002360e01b81526001600160a01b038c811660048301529091169063038c002390602401602060405180830381865afa158015610bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c19919061169b565b610c23908361171c565b9150600101610b89565b506000816001600160401b03811115610c4857610c48610ff5565b604051908082528060200260200182016040528015610cbd57816020015b610caa6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b815260200190600190039081610c665790505b5090506000915060005b83811015610ea2576000868281518110610ce357610ce36113b2565b602090810291909101015160405163038c002360e01b81526001600160a01b038e811660048301529091169063038c002390602401602060405180830381865afa158015610d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d59919061169b565b905060005b81811015610e98576000888481518110610d7a57610d7a6113b2565b60200260200101516001600160a01b031663d241c1ea8f846040518363ffffffff1660e01b8152600401610dc39291906001600160a01b03929092168252602082015260400190565b606060405180830381865afa158015610de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e04919061172f565b90506040518060a001604052808f6001600160a01b031681526020018b8681518110610e3257610e326113b2565b60200260200101516001600160a01b0316815260200182602001518152602001826000015181526020018260400151815250858781518110610e7657610e766113b2565b60200260200101819052508580610e8c90611703565b96505050600101610d5e565b5050600101610cc7565b509998505050505050505050565b803561ffff81168114610ec257600080fd5b919050565b60008060408385031215610eda57600080fd5b610ee383610eb0565b9150610ef160208401610eb0565b90509250929050565b60005b83811015610f15578181015183820152602001610efd565b50506000910152565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015610fe757888303603f19018552815180516001600160a01b03168452878101511515888501528681015160a0888601819052815190860181905260c09190610f9881848901848e01610efa565b6060848101516001600160401b031690880152608093840151939150610fc8828801856001600160401b03169052565b978a0197601f01601f1916959095010193505090860190600101610f47565b509098975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561102d5761102d610ff5565b60405290565b604051606081016001600160401b038111828210171561102d5761102d610ff5565b604051601f8201601f191681016001600160401b038111828210171561107d5761107d610ff5565b604052919050565b60006001600160401b0382111561109e5761109e610ff5565b5060051b60200190565b6001600160a01b03811681146110bd57600080fd5b50565b600080604083850312156110d357600080fd5b82356001600160401b038111156110e957600080fd5b8301601f810185136110fa57600080fd5b8035602061110f61110a83611085565b611055565b82815260059290921b8301810191818101908884111561112e57600080fd5b938201935b83851015611155578435611146816110a8565b82529382019390820190611133565b98969091013596505050505050565b6020808252825182820181905260009190848201906040850190845b818110156111a55783516001600160401b031683529284019291840191600101611180565b50909695505050505050565b6000806000606084860312156111c657600080fd5b83356111d1816110a8565b92506111df60208501610eb0565b91506111ed60408501610eb0565b90509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561125957815180516001600160a01b03908116865287820151168786015285810151868601526060908101519085015260809093019290850190600101611213565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561125957815180516001600160a01b0390811686528782015116878601528581015186860152606080820151908601526080908101519085015260a09093019290850190600101611283565b600082601f8301126112e457600080fd5b815160206112f461110a83611085565b8083825260208201915060208460051b87010193508684111561131657600080fd5b602086015b8481101561133b57805161132e816110a8565b835291830191830161131b565b509695505050505050565b60008060006060848603121561135b57600080fd5b83516001600160401b038082111561137257600080fd5b61137e878388016112d3565b9450602086015191508082111561139457600080fd5b506113a1868287016112d3565b925050604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b6000806000606084860312156113dd57600080fd5b83519250602084015180151581146113f457600080fd5b80925050604084015190509250925092565b600082601f83011261141757600080fd5b81516001600160401b0381111561143057611430610ff5565b611443601f8201601f1916602001611055565b81815284602083860101111561145857600080fd5b611469826020830160208701610efa565b949350505050565b60006020828403121561148357600080fd5b81516001600160401b038082111561149a57600080fd5b90830190608082860312156114ae57600080fd5b6114b661100b565b8251828111156114c557600080fd5b6114d187828601611406565b8252506020830151828111156114e657600080fd5b6114f287828601611406565b60208301525060408301518281111561150a57600080fd5b61151687828601611406565b60408301525060608301518281111561152e57600080fd5b61153a87828601611406565b60608301525095945050505050565b80516001600160401b0381168114610ec257600080fd5b60006060828403121561157257600080fd5b61157a611033565b61158383611549565b815261159160208401611549565b60208201526115a260408401611549565b60408201529392505050565b604080825283519082018190526000906020906060840190828701845b828110156115f05781516001600160a01b0316845292840192908401906001016115cb565b505050602093909301939093525092915050565b6000602080838503121561161757600080fd5b82516001600160401b0381111561162d57600080fd5b8301601f8101851361163e57600080fd5b805161164c61110a82611085565b81815260059190911b8201830190838101908783111561166b57600080fd5b928401925b828410156116905761168184611549565b82529284019290840190611670565b979650505050505050565b6000602082840312156116ad57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000826116e757634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761057e5761057e6116b4565b600060018201611715576117156116b4565b5060010190565b8082018082111561057e5761057e6116b4565b60006060828403121561174157600080fd5b611749611033565b825181526020830151602082015260408301516040820152809150509291505056fea26469706673582212204342d1de921ba61f1f64e61121a73182953ca354396aa63a677f3a0119b2a15564736f6c63430008190033", - "nonce": "0x5", - "chainId": "0x38" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x8e48ba", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x0", - "transactionHash": "0x912d9679948068af6dfbd596b7acc131b37657f2dcffd390a6e6cfe258712c62", - "transactionIndex": "0x45", - "blockHash": "0xe081b60f95fe523fd43aba21e85011cffac01e5ac3caf920be841ab6ed2bd8b3", - "blockNumber": "0x24f6c43", - "gasUsed": "0x151647", - "effectiveGasPrice": "0x3b9aca00", - "from": "0xba1b98d95ecc9158de3a8a3f38d2c22884886e62", - "to": null, - "contractAddress": "0x830295c0abe7358f7e24bc38408095621474280b" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1715823704, - "chain": 56, - "commit": "f8c567f" -} \ No newline at end of file diff --git a/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-latest.json b/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-latest.json deleted file mode 100644 index fd65efb..0000000 --- a/bsc/hub_reader/broadcast/HubReader.s.sol/56/run-latest.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x912d9679948068af6dfbd596b7acc131b37657f2dcffd390a6e6cfe258712c62", - "transactionType": "CREATE", - "contractName": "HubReader", - "contractAddress": "0x830295c0abe7358f7e24bc38408095621474280b", - "function": null, - "arguments": null, - "transaction": { - "from": "0xba1b98d95ecc9158de3a8a3f38d2c22884886e62", - "gas": "0x1b67d2", - "value": "0x0", - "input": "0x6080604052348015600f57600080fd5b50600080546001600160a01b0319166120021790556117a1806100336000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806334c2d77e1461005c5780635ee6594514610085578063cd02cf2e146100b0578063ced0e70e146100d0578063d9d4c020146100f0575b600080fd5b61006f61006a366004610ec7565b610110565b60405161007c9190610f1e565b60405180910390f35b600054610098906001600160a01b031681565b6040516001600160a01b03909116815260200161007c565b6100c36100be3660046110c0565b610584565b60405161007c9190611164565b6100e36100de3660046111b1565b610829565b60405161007c91906111f6565b6101036100fe3660046111b1565b610ae1565b60405161007c9190611266565b600080546040516305ff817160e51b815261ffff8086166004830152841660248201526060929182916001600160a01b039091169063bff02e2090604401600060405180830381865afa15801561016b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101939190810190611346565b925050915060008461ffff1682106101af578461ffff166101b1565b815b90506000816001600160401b038111156101cd576101cd610ff5565b60405190808252806020026020018201604052801561022757816020015b6040805160a081018252600080825260208083018290526060938301849052928201819052608082015282526000199092019101816101eb5790505b50905060005b828110156104aa576000805486516001600160a01b039091169063cbb04d9d9088908590811061025f5761025f6113b2565b60200260200101516040518263ffffffff1660e01b815260040161029291906001600160a01b0391909116815260200190565b606060405180830381865afa1580156102af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d391906113c8565b506000805489519294509092506001600160a01b03169063a43569b390899086908110610302576103026113b2565b60200260200101516040518263ffffffff1660e01b815260040161033591906001600160a01b0391909116815260200190565b600060405180830381865afa158015610352573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261037a9190810190611471565b5160008054895192935090916001600160a01b0390911690636ec01b27908a90879081106103aa576103aa6113b2565b60200260200101516040518263ffffffff1660e01b81526004016103dd91906001600160a01b0391909116815260200190565b606060405180830381865afa1580156103fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041e9190611560565b6000015190506040518060a00160405280898681518110610441576104416113b2565b60200260200101516001600160a01b031681526020018415158152602001838152602001826001600160401b0316815260200160006001600160401b0316815250858581518110610494576104946113b2565b602090810291909101015250505060010161022d565b50604051636681679760e11b8152600090309063cd02cf2e906104d390889042906004016115ae565b600060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105189190810190611604565b905060005b8381101561057557818181518110610537576105376113b2565b6020026020010151838281518110610551576105516113b2565b60209081029190910101516001600160401b0390911660809091015260010161051d565b50909450505050505b92915050565b6000805460408051631fa8882b60e01b81529051606093926001600160a01b031691631fa8882b9160048083019260209291908290030181865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f4919061169b565b6105fe90846116ca565b84519091506000816001600160401b0381111561061d5761061d610ff5565b604051908082528060200260200182016040528015610646578160200160208202803683370190505b50905060005b8281101561081f576000805488516001600160a01b0390911690638cd22b22908a908590811061067e5761067e6113b2565b6020026020010151876040518363ffffffff1660e01b81526004016106b89291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa1580156106d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f9919061169b565b9050806000036107095750610817565b6000805489516001600160a01b039091169063f80a3402908b9086908110610733576107336113b2565b6020026020010151886040518363ffffffff1660e01b815260040161076d9291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae919061169b565b9050806000036107bf575050610817565b816107cc8261016d6116ec565b6107d8906127106116ec565b6107e291906116ca565b8484815181106107f4576107f46113b2565b60200260200101906001600160401b031690816001600160401b03168152505050505b60010161064c565b5095945050505050565b600080546040516305ff817160e51b815261ffff80861660048301528416602482015260609291829182916001600160a01b03169063bff02e2090604401600060405180830381865afa158015610884573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108ac9190810190611346565b92509250925060008561ffff1682106108c9578561ffff166108cb565b815b9050600080826001600160401b038111156108e8576108e8610ff5565b60405190808252806020026020018201604052801561093a57816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816109065790505b50905060005b83811015610ad157600086828151811061095c5761095c6113b2565b60209081029190910101516040516370a0823160e01b81526001600160a01b038e811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d7919061169b565b60405163247ebc2d60e21b8152600481018290529091506000906001600160a01b038416906391faf0b490602401602060405180830381865afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a46919061169b565b90508015610ac65760405180608001604052808f6001600160a01b031681526020018b8681518110610a7a57610a7a6113b2565b60200260200101516001600160a01b0316815260200182815260200183815250858781518110610aac57610aac6113b2565b60200260200101819052508580610ac290611703565b9650505b505050600101610940565b5090815298975050505050505050565b600080546040516305ff817160e51b815261ffff80861660048301528416602482015260609291829182916001600160a01b03169063bff02e2090604401600060405180830381865afa158015610b3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b649190810190611346565b92509250925060008561ffff168210610b81578561ffff16610b83565b815b90506000805b82811015610c2d57848181518110610ba357610ba36113b2565b602090810291909101015160405163038c002360e01b81526001600160a01b038c811660048301529091169063038c002390602401602060405180830381865afa158015610bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c19919061169b565b610c23908361171c565b9150600101610b89565b506000816001600160401b03811115610c4857610c48610ff5565b604051908082528060200260200182016040528015610cbd57816020015b610caa6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b815260200190600190039081610c665790505b5090506000915060005b83811015610ea2576000868281518110610ce357610ce36113b2565b602090810291909101015160405163038c002360e01b81526001600160a01b038e811660048301529091169063038c002390602401602060405180830381865afa158015610d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d59919061169b565b905060005b81811015610e98576000888481518110610d7a57610d7a6113b2565b60200260200101516001600160a01b031663d241c1ea8f846040518363ffffffff1660e01b8152600401610dc39291906001600160a01b03929092168252602082015260400190565b606060405180830381865afa158015610de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e04919061172f565b90506040518060a001604052808f6001600160a01b031681526020018b8681518110610e3257610e326113b2565b60200260200101516001600160a01b0316815260200182602001518152602001826000015181526020018260400151815250858781518110610e7657610e766113b2565b60200260200101819052508580610e8c90611703565b96505050600101610d5e565b5050600101610cc7565b509998505050505050505050565b803561ffff81168114610ec257600080fd5b919050565b60008060408385031215610eda57600080fd5b610ee383610eb0565b9150610ef160208401610eb0565b90509250929050565b60005b83811015610f15578181015183820152602001610efd565b50506000910152565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015610fe757888303603f19018552815180516001600160a01b03168452878101511515888501528681015160a0888601819052815190860181905260c09190610f9881848901848e01610efa565b6060848101516001600160401b031690880152608093840151939150610fc8828801856001600160401b03169052565b978a0197601f01601f1916959095010193505090860190600101610f47565b509098975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561102d5761102d610ff5565b60405290565b604051606081016001600160401b038111828210171561102d5761102d610ff5565b604051601f8201601f191681016001600160401b038111828210171561107d5761107d610ff5565b604052919050565b60006001600160401b0382111561109e5761109e610ff5565b5060051b60200190565b6001600160a01b03811681146110bd57600080fd5b50565b600080604083850312156110d357600080fd5b82356001600160401b038111156110e957600080fd5b8301601f810185136110fa57600080fd5b8035602061110f61110a83611085565b611055565b82815260059290921b8301810191818101908884111561112e57600080fd5b938201935b83851015611155578435611146816110a8565b82529382019390820190611133565b98969091013596505050505050565b6020808252825182820181905260009190848201906040850190845b818110156111a55783516001600160401b031683529284019291840191600101611180565b50909695505050505050565b6000806000606084860312156111c657600080fd5b83356111d1816110a8565b92506111df60208501610eb0565b91506111ed60408501610eb0565b90509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561125957815180516001600160a01b03908116865287820151168786015285810151868601526060908101519085015260809093019290850190600101611213565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561125957815180516001600160a01b0390811686528782015116878601528581015186860152606080820151908601526080908101519085015260a09093019290850190600101611283565b600082601f8301126112e457600080fd5b815160206112f461110a83611085565b8083825260208201915060208460051b87010193508684111561131657600080fd5b602086015b8481101561133b57805161132e816110a8565b835291830191830161131b565b509695505050505050565b60008060006060848603121561135b57600080fd5b83516001600160401b038082111561137257600080fd5b61137e878388016112d3565b9450602086015191508082111561139457600080fd5b506113a1868287016112d3565b925050604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b6000806000606084860312156113dd57600080fd5b83519250602084015180151581146113f457600080fd5b80925050604084015190509250925092565b600082601f83011261141757600080fd5b81516001600160401b0381111561143057611430610ff5565b611443601f8201601f1916602001611055565b81815284602083860101111561145857600080fd5b611469826020830160208701610efa565b949350505050565b60006020828403121561148357600080fd5b81516001600160401b038082111561149a57600080fd5b90830190608082860312156114ae57600080fd5b6114b661100b565b8251828111156114c557600080fd5b6114d187828601611406565b8252506020830151828111156114e657600080fd5b6114f287828601611406565b60208301525060408301518281111561150a57600080fd5b61151687828601611406565b60408301525060608301518281111561152e57600080fd5b61153a87828601611406565b60608301525095945050505050565b80516001600160401b0381168114610ec257600080fd5b60006060828403121561157257600080fd5b61157a611033565b61158383611549565b815261159160208401611549565b60208201526115a260408401611549565b60408201529392505050565b604080825283519082018190526000906020906060840190828701845b828110156115f05781516001600160a01b0316845292840192908401906001016115cb565b505050602093909301939093525092915050565b6000602080838503121561161757600080fd5b82516001600160401b0381111561162d57600080fd5b8301601f8101851361163e57600080fd5b805161164c61110a82611085565b81815260059190911b8201830190838101908783111561166b57600080fd5b928401925b828410156116905761168184611549565b82529284019290840190611670565b979650505050505050565b6000602082840312156116ad57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000826116e757634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761057e5761057e6116b4565b600060018201611715576117156116b4565b5060010190565b8082018082111561057e5761057e6116b4565b60006060828403121561174157600080fd5b611749611033565b825181526020830151602082015260408301516040820152809150509291505056fea26469706673582212204342d1de921ba61f1f64e61121a73182953ca354396aa63a677f3a0119b2a15564736f6c63430008190033", - "nonce": "0x5", - "chainId": "0x38" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x8e48ba", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x0", - "transactionHash": "0x912d9679948068af6dfbd596b7acc131b37657f2dcffd390a6e6cfe258712c62", - "transactionIndex": "0x45", - "blockHash": "0xe081b60f95fe523fd43aba21e85011cffac01e5ac3caf920be841ab6ed2bd8b3", - "blockNumber": "0x24f6c43", - "gasUsed": "0x151647", - "effectiveGasPrice": "0x3b9aca00", - "from": "0xba1b98d95ecc9158de3a8a3f38d2c22884886e62", - "to": null, - "contractAddress": "0x830295c0abe7358f7e24bc38408095621474280b" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1715823704, - "chain": 56, - "commit": "f8c567f" -} \ No newline at end of file diff --git a/bsc/hub_reader/foundry.toml b/bsc/hub_reader/foundry.toml deleted file mode 100644 index fa5d19d..0000000 --- a/bsc/hub_reader/foundry.toml +++ /dev/null @@ -1,10 +0,0 @@ -[profile.default] -src = "src" -out = "out" -libs = ["lib"] - -[rpc_endpoints] -bsc = "${BSC_RPC_URL}" - -[etherscan] -bsc = { key = "${BSCSCAN_API_KEY}" } diff --git a/bsc/hub_reader/lib/forge-std b/bsc/hub_reader/lib/forge-std deleted file mode 160000 index d44c4fb..0000000 --- a/bsc/hub_reader/lib/forge-std +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d44c4fbbb9ff054fb334babbdd34f9b6e899b3d6 diff --git a/deploy/deploy-stargate-non-zksync.sh b/deploy/deploy-stargate-non-zksync.sh new file mode 100644 index 0000000..c58741a --- /dev/null +++ b/deploy/deploy-stargate-non-zksync.sh @@ -0,0 +1,129 @@ +#!/bin/bash + +# Ensure the script is run with Bash +if [ -z "$BASH_VERSION" ]; then + echo "This script requires Bash. Please run it with bash." + exit 1 +fi + +# Load environment variables +if [ -f ".env" ]; then + export $(grep -v '^#' .env | xargs) +else + echo ".env file not found. Please create one with the necessary environment variables." + exit 1 +fi + +# Validate the presence of PRIVATE_KEY +if [ -z "$PRIVATE_KEY" ]; then + echo "Missing PRIVATE_KEY. Exiting." + exit 1 +fi + +# List of non-zkSync chains +CHAIN_IDS=("1:ethereum" "10:optimism" "8453:base" "56:bsc" "43114:avalanche" "137:polygon" "42161:arbitrum") + +# Deployment script +SCRIPT_CONTRACT_NAME="GemStargateDeployerScript" + +# Target chain name passed as an argument +TARGET_CHAIN=$1 + +for CHAIN in "${CHAIN_IDS[@]}"; do + CHAIN_ID="${CHAIN%%:*}" + NETWORK_NAME="${CHAIN##*:}" + + # Skip if specific chain is provided and doesn't match + if [ -n "$TARGET_CHAIN" ] && [ "$NETWORK_NAME" != "$TARGET_CHAIN" ]; then + continue + fi + + # Convert network name to uppercase + NETWORK_NAME_UPPER=$(echo "$NETWORK_NAME" | tr '[:lower:]' '[:upper:]') + + RPC_URL_VAR="${NETWORK_NAME_UPPER}_RPC_URL" + ENDPOINT_VAR="STARGATE_ENDPOINT_${NETWORK_NAME_UPPER}" + ETHERSCAN_API_KEY_VAR="${NETWORK_NAME_UPPER}_SCAN_API_KEY" + + RPC_URL=$(eval echo "\$$RPC_URL_VAR") + STARGATE_ENDPOINT=$(eval echo "\$$ENDPOINT_VAR") + ETHERSCAN_API_KEY=$(eval echo "\$$ETHERSCAN_API_KEY_VAR") + + echo "🚀 Deploying to chain: $NETWORK_NAME (Chain ID: $CHAIN_ID)" + + if [ -z "$RPC_URL" ] || [ -z "$STARGATE_ENDPOINT" ] || [ -z "$ETHERSCAN_API_KEY" ]; then + echo "⚠️ Missing required environment variables for $NETWORK_NAME. Skipping..." + continue + fi + + echo "🔍 Estimating Gas for Deployment..." + # Estimate Gas Usage for Constructor + GAS_ESTIMATE=$(cast estimate --rpc-url "$RPC_URL" \ + --private-key "$PRIVATE_KEY" \ + 0x0000000000000000000000000000000000000000 \ + "StargateFeeReceiver.constructor(address)" \ + "$STARGATE_ENDPOINT") + + if [[ -z "$GAS_ESTIMATE" ]] || [[ "$GAS_ESTIMATE" == "infinite" ]]; then + echo "⚠️ Gas estimation failed. Setting fallback gas limit of 3,000,000." + GAS_ESTIMATE=3000000 + else + # Apply a 30% buffer for safety + GAS_ESTIMATE=$(( GAS_ESTIMATE + (GAS_ESTIMATE / 3) )) + + # Ensure a reasonable minimum + if [[ "$GAS_ESTIMATE" -lt 3000000 ]]; then + GAS_ESTIMATE=3000000 + fi + fi + + echo "✅ Final Gas Limit: $GAS_ESTIMATE" + + # Check deployer's balance + DEPLOYER_BALANCE_WEI=$(cast balance $(cast wallet address --private-key "$PRIVATE_KEY") --rpc-url "$RPC_URL") + DEPLOYER_BALANCE=$(echo "scale=18; $DEPLOYER_BALANCE_WEI / 10^18" | bc) + echo "💰 Deployer Balance: $DEPLOYER_BALANCE ETH" + + # # Ensure deployer has at least 0.01 ETH + # if (( $(echo "$DEPLOYER_BALANCE < 0.01" | bc -l) )); then + # echo "❌ Insufficient ETH balance for deployment. Exiting." + # exit 1 + # fi + + # Optimize Solidity Bytecode + echo "⚡ Optimizing Solidity Bytecode..." + forge build --optimize --optimizer-runs 200 + + echo "🚀 Starting Deployment..." + + # Run deployment with optimized gas settings + forge script "$SCRIPT_CONTRACT_NAME" \ + --rpc-url "$RPC_URL" \ + --chain-id "$CHAIN_ID" \ + --etherscan-api-key "$ETHERSCAN_API_KEY" \ + --broadcast \ + --verify \ + --gas-limit $GAS_ESTIMATE \ + --gas-price 200000000 \ + -vvvv + + # Check if the deployment encountered the "null response" error + DEPLOYMENT_STATUS=$? + if [[ $DEPLOYMENT_STATUS -ne 0 ]]; then + echo "⚠️ Deployment encountered an error. Retrying with --resume..." + forge script "$SCRIPT_CONTRACT_NAME" \ + --rpc-url "$RPC_URL" \ + --chain-id "$CHAIN_ID" \ + --etherscan-api-key "$ETHERSCAN_API_KEY" \ + --broadcast \ + --verify \ + --gas-limit $GAS_ESTIMATE \ + --gas-price 200000000 \ + --resume \ + -vvvv + fi + + echo "✅ Deployment to $NETWORK_NAME completed." +done + +echo "🎉 All non-zkSync deployments done!" diff --git a/deploy/deploy-stargate-zksync.sh b/deploy/deploy-stargate-zksync.sh new file mode 100755 index 0000000..220e919 --- /dev/null +++ b/deploy/deploy-stargate-zksync.sh @@ -0,0 +1,112 @@ +#!/bin/bash + +# Ensure Bash is used +if [ -z "$BASH_VERSION" ]; then + echo "This script requires Bash. Please run it with bash." + exit 1 +fi + +# Load environment variables +if [ -f ".env" ]; then + export $(grep -v '^#' .env | xargs) +else + echo ".env file not found. Please create one with necessary environment variables." + exit 1 +fi + +# Validate private key +if [ -z "$PRIVATE_KEY" ]; then + echo "Missing PRIVATE_KEY. Exiting." + exit 1 +fi + +# zkSync chain list +ZKSYNC_CHAIN_IDS=("2741:abstract") + +# Deployment script +SCRIPT_CONTRACT_NAME="GemStargateDeployerScript" + +# Chain name passed as an argument +TARGET_CHAIN=$1 + +for CHAIN in "${ZKSYNC_CHAIN_IDS[@]}"; do + CHAIN_ID="${CHAIN%%:*}" + NETWORK_NAME="${CHAIN##*:}" + + # Skip if specific chain is provided and doesn't match + if [ -n "$TARGET_CHAIN" ] && [ "$NETWORK_NAME" != "$TARGET_CHAIN" ]; then + continue + fi + + # Convert network name to uppercase + NETWORK_NAME_UPPER=$(echo "$NETWORK_NAME" | tr '[:lower:]' '[:upper:]') + + RPC_URL_VAR="${NETWORK_NAME_UPPER}_RPC_URL" + ENDPOINT_VAR="STARGATE_ENDPOINT_${NETWORK_NAME_UPPER}" + ETHERSCAN_API_KEY_VAR="${NETWORK_NAME_UPPER}_SCAN_API_KEY" + + RPC_URL=$(eval echo "\$$RPC_URL_VAR") + STARGATE_ENDPOINT=$(eval echo "\$$ENDPOINT_VAR") + ETHERSCAN_API_KEY=$(eval echo "\$$ETHERSCAN_API_KEY_VAR") + + echo "Deploying to zkSync chain: $NETWORK_NAME (Chain ID: $CHAIN_ID)" + + if [ -z "$RPC_URL" ] || [ -z "$STARGATE_ENDPOINT" ] || [ -z "$ETHERSCAN_API_KEY" ]; then + echo "Missing required environment variables for $NETWORK_NAME. Skipping..." + continue + fi + + echo "🔍 Estimating Gas for Deployment..." + # Estimate Gas Usage for Constructor + GAS_ESTIMATE=$(cast estimate --rpc-url "$RPC_URL" \ + --private-key "$PRIVATE_KEY" \ + 0x0000000000000000000000000000000000000000 \ + "StargateFeeReceiver.constructor(address)" \ + "$STARGATE_ENDPOINT") + + if [[ -z "$GAS_ESTIMATE" ]] || [[ "$GAS_ESTIMATE" == "infinite" ]]; then + echo "⚠️ Gas estimation failed. Setting fallback gas limit of 3,000,000." + GAS_ESTIMATE=3000000 + else + # Apply a 30% buffer for safety + GAS_ESTIMATE=$(( GAS_ESTIMATE + (GAS_ESTIMATE / 3) )) + + # Ensure a reasonable minimum + if [[ "$GAS_ESTIMATE" -lt 3000000 ]]; then + GAS_ESTIMATE=3000000 + fi + fi + + echo "✅ Final Gas Limit: $GAS_ESTIMATE" + + # Check deployer's balance + DEPLOYER_BALANCE=$(cast balance $(cast wallet address --private-key "$PRIVATE_KEY") --rpc-url "$RPC_URL") + echo "💰 Deployer Balance: $DEPLOYER_BALANCE ETH" + + if [[ "$DEPLOYER_BALANCE" -lt 0.01 ]]; then + echo "❌ Insufficient ETH balance for deployment. Exiting." + exit 1 + fi + + # Optimize Solidity Bytecode + echo "⚡ Optimizing Solidity Bytecode..." + forge build --optimize --optimizer-runs 200 + + echo "🚀 Starting Deployment..." + + # Run deployment with optimized gas settings + forge script "$SCRIPT_CONTRACT_NAME" \ + --rpc-url "$RPC_URL" \ + --chain-id "$CHAIN_ID" \ + --etherscan-api-key "$ETHERSCAN_API_KEY" \ + --broadcast \ + --verify \ + --gas-limit $GAS_ESTIMATE \ + --gas-price 200000000 \ + -vvvv \ + --zksync + + echo "✅ Deployment to $NETWORK_NAME completed." +done + +echo "🎉 All zkSync deployments done!" diff --git a/deploy/deploy-stargate.sh b/deploy/deploy-stargate.sh new file mode 100755 index 0000000..42fc8f8 --- /dev/null +++ b/deploy/deploy-stargate.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# Ensure Bash is used +if [ -z "$BASH_VERSION" ]; then + echo "This script requires Bash. Please run it with bash." + exit 1 +fi + +# Load environment variables +if [ -f ".env" ]; then + export $(grep -v '^#' .env | xargs) +else + echo ".env file not found. Please create one with necessary environment variables." + exit 1 +fi + +# Validate input +if [ -z "$1" ]; then + echo "Usage: $0 " + exit 1 +fi + +CHAIN_NAME=$1 + +# List of zkSync chains +ZKSYNC_CHAINS=("abstract") + +# Convert chain name to lowercase +CHAIN_NAME_LOWER=$(echo "$CHAIN_NAME" | tr '[:upper:]' '[:lower:]') + +# Check if chain is zkSync +if [[ " ${ZKSYNC_CHAINS[@]} " =~ " $CHAIN_NAME_LOWER " ]]; then + echo "Deploying to zkSync chain: $CHAIN_NAME_LOWER" + bash ./deploy/deploy-stargate-zksync.sh "$CHAIN_NAME_LOWER" +else + echo "Deploying to non-zkSync chain: $CHAIN_NAME_LOWER" + bash ./deploy/deploy-stargate-non-zksync.sh "$CHAIN_NAME_LOWER" +fi diff --git a/foundry.toml b/foundry.toml new file mode 100644 index 0000000..7e3b9b4 --- /dev/null +++ b/foundry.toml @@ -0,0 +1,22 @@ +[profile.default] +src = "src" +out = "out" +libs = ["lib"] + +[rpc_endpoints] +ethereum = "${ETHEREUM_RPC_URL}" +optimism = "${OPTIMISM_RPC_URL}" +base = "${BASE_RPC_URL}" +bsc = "${BSC_RPC_URL}" +avalanche = "${AVALANCHE_RPC_URL}" +polygon = "${POLYGON_RPC_URL}" +arbitrum = "${ARBITRUM_RPC_URL}" + +[etherscan] +ethereum = { key = "${ETHEREUM_SCAN_API_KEY}" } +optimism = { key = "${OPTIMISM_SCAN_API_KEY}" } +base = { key = "${BASE_SCAN_API_KEY}" } +bsc = { key = "${BSC_SCAN_API_KEY}" } +# avalanche = { key = "${AVALANCHE_SCAN_API_KEY}" } // We don't need api key for verification +polygon = { key = "${POLYGON_SCAN_API_KEY}" } +arbitrum = { key = "${ARBITRUM_SCAN_API_KEY}" } diff --git a/justfile b/justfile new file mode 100644 index 0000000..aa400bd --- /dev/null +++ b/justfile @@ -0,0 +1,14 @@ +set dotenv-load := true + + +build: + forge build + +test: + forge test + +deploy-stargate CHAIN_NAME: + bash ./deploy/deploy-stargate.sh {{CHAIN_NAME}} + +deploy-hub-reader: + forge script script/hub_reader/HubReader.s.sol:HubReaderScript --rpc-url "$BSC_RPC_URL" --broadcast --verify -vvvv diff --git a/lib/forge-std b/lib/forge-std new file mode 160000 index 0000000..999be66 --- /dev/null +++ b/lib/forge-std @@ -0,0 +1 @@ +Subproject commit 999be66ec94c78090087f674bbf52ce1cca12b75 diff --git a/lib/layerzero-v2 b/lib/layerzero-v2 new file mode 160000 index 0000000..7da7684 --- /dev/null +++ b/lib/layerzero-v2 @@ -0,0 +1 @@ +Subproject commit 7da76840e41dc593d3c2007ce35b911b1d816b4b diff --git a/lib/openzeppelin-contracts b/lib/openzeppelin-contracts new file mode 160000 index 0000000..0d0e4aa --- /dev/null +++ b/lib/openzeppelin-contracts @@ -0,0 +1 @@ +Subproject commit 0d0e4aabdbd6e5994d52048fe42832fc334c6d1f diff --git a/lib/solidity-bytes-utils b/lib/solidity-bytes-utils new file mode 160000 index 0000000..c433288 --- /dev/null +++ b/lib/solidity-bytes-utils @@ -0,0 +1 @@ +Subproject commit c433288c2907d383630864b6032e885d5603a654 diff --git a/lib/stargate-v2 b/lib/stargate-v2 new file mode 160000 index 0000000..e330655 --- /dev/null +++ b/lib/stargate-v2 @@ -0,0 +1 @@ +Subproject commit e330655ddb08255db59c2ec79a9d606581462b81 diff --git a/remappings.txt b/remappings.txt new file mode 100644 index 0000000..9a0e6c5 --- /dev/null +++ b/remappings.txt @@ -0,0 +1,13 @@ +forge-std/=lib/forge-std/src/ +@layerzerolabs/lz-evm-messagelib-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/messagelib/ +@layerzerolabs/lz-evm-protocol-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/protocol/ +@layerzerolabs/lz-evm-oapp-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/oapp/ +@stargatefinance/stg-evm-v2/=lib/stargate-v2/packages/stg-evm-v2/ +solidity-bytes-utils/=lib/solidity-bytes-utils/ +@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/ +ds-test/=lib/layerzero-v2/lib/forge-std/lib/ds-test/src/ +erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/ +halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/ +layerzero-v2/=lib/layerzero-v2/ +openzeppelin-contracts/=lib/openzeppelin-contracts/ +stargate-v2/=lib/stargate-v2/packages/stg-evm-v2/src/ diff --git a/bsc/hub_reader/script/HubReader.s.sol b/script/hub_reader/HubReader.s.sol similarity index 90% rename from bsc/hub_reader/script/HubReader.s.sol rename to script/hub_reader/HubReader.s.sol index fafb64e..06de822 100644 --- a/bsc/hub_reader/script/HubReader.s.sol +++ b/script/hub_reader/HubReader.s.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.13; import {Script, console} from "forge-std/Script.sol"; -import "../src/HubReader.sol"; +import "../../src/hub_reader/HubReader.sol"; contract HubReaderScript is Script { function run() public { diff --git a/script/stargate/GemStargateDeployer.s.sol b/script/stargate/GemStargateDeployer.s.sol new file mode 100644 index 0000000..2d8717b --- /dev/null +++ b/script/stargate/GemStargateDeployer.s.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import {Script, console} from "forge-std/Script.sol"; +import "../../src/stargate/StargateFeeReceiver.sol"; + +contract GemStargateDeployerScript is Script { + struct NetworkConfig { + address endpoint; + } + + mapping(uint256 => string) private chainToNetworkName; + + constructor() { + chainToNetworkName[1] = "ETHEREUM"; + chainToNetworkName[10] = "OPTIMISM"; + chainToNetworkName[8453] = "BASE"; + chainToNetworkName[56] = "BSC"; + chainToNetworkName[42161] = "ARBITRUM"; + chainToNetworkName[137] = "POLYGON"; + chainToNetworkName[43114] = "AVALANCHE"; + chainToNetworkName[2741] = "ABSTRACT"; + } + + function getNetworkConfig(uint256 chainId) internal view returns (NetworkConfig memory) { + string memory networkName = chainToNetworkName[chainId]; + + // Construct environment variable names + string memory endpointVar = string.concat("STARGATE_ENDPOINT_", networkName); + + // Get values from environment + address endpoint = vm.envAddress(endpointVar); + + return NetworkConfig(endpoint); + } + + function run() public { + console.log("Deploying StargateFeeReceiver..."); + uint256 chainId = block.chainid; + console.log("chainId: %s", chainId); + // Skip unsupported chains + if (bytes(chainToNetworkName[chainId]).length == 0) { + console.log("Unsupported chain. Chain ID: %s. Skipping...", chainId); + return; + } + + NetworkConfig memory config = getNetworkConfig(chainId); + + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + + StargateFeeReceiver handler = new StargateFeeReceiver(config.endpoint); + + console.log("Deployed StargateFeeReceiver for Stargate %s at %s", config.endpoint, address(handler)); + + vm.stopBroadcast(); + } +} diff --git a/bsc/hub_reader/src/HubReader.sol b/src/hub_reader/HubReader.sol similarity index 100% rename from bsc/hub_reader/src/HubReader.sol rename to src/hub_reader/HubReader.sol diff --git a/bsc/hub_reader/src/interface/IStakeCredit.sol b/src/hub_reader/interface/IStakeCredit.sol similarity index 100% rename from bsc/hub_reader/src/interface/IStakeCredit.sol rename to src/hub_reader/interface/IStakeCredit.sol diff --git a/bsc/hub_reader/src/interface/IStakeHub.sol b/src/hub_reader/interface/IStakeHub.sol similarity index 100% rename from bsc/hub_reader/src/interface/IStakeHub.sol rename to src/hub_reader/interface/IStakeHub.sol diff --git a/src/library/MulticallHandler.sol b/src/library/MulticallHandler.sol new file mode 100644 index 0000000..68196ee --- /dev/null +++ b/src/library/MulticallHandler.sol @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {Address} from "@openzeppelin/contracts/utils/Address.sol"; +import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; + +/** + * @title Multicall Handler + * @notice A contract that handles multiple calls in a single transaction. + * @dev Inspired by https://github.com/across-protocol/contracts/blob/master/contracts/handlers/MulticallHandler.sol + */ +contract MulticallHandler is ReentrancyGuard { + using SafeERC20 for IERC20; + using Address for address payable; + + struct Call { + address target; + bytes callData; + uint256 value; + } + + struct Instructions { + // Calls that will be attempted. + Call[] calls; + // Where the tokens go if any part of the call fails. + // Leftover tokens are sent here as well if the action succeeds. + address fallbackRecipient; + } + + // Emitted when one of the calls fails. Note: all calls are reverted in this case. + event CallsFailed(Call[] calls, address indexed fallbackRecipient); + + // Emitted when there are leftover tokens that are sent to the fallbackRecipient. + event DrainedTokens(address indexed recipient, address indexed token, uint256 indexed amount); + event DrainedNative(address indexed recipient, uint256 amount); + + // Errors + error CallReverted(uint256 index, Call[] calls); + error NotSelf(); + error InvalidCall(uint256 index, Call[] calls); + + modifier onlySelf() { + _requireSelf(); + _; + } + + /** + * @notice Attempts to execute a list of calls. + * @param calls The list of calls to execute. + * @dev Inspired by https://github.com/across-protocol/contracts/blob/master/contracts/handlers/MulticallHandler.sol#L79 + */ + function attemptCalls(Call[] memory calls) external onlySelf nonReentrant { + uint256 length = calls.length; + for (uint256 i = 0; i < length; ++i) { + Call memory call = calls[i]; + + // If we are calling an EOA with calldata, assume target was incorrectly specified and revert. + if (call.callData.length > 0 && call.target.code.length == 0) { + revert InvalidCall(i, calls); + } + + (bool success,) = call.target.call{value: call.value}(call.callData); + if (!success) revert CallReverted(i, calls); + } + } + + function _drainRemainingTokens(address token, address payable destination) internal { + if (token != address(0)) { + // ERC20 token. + uint256 amount = IERC20(token).balanceOf(address(this)); + if (amount > 0) { + IERC20(token).safeTransfer(destination, amount); + emit DrainedTokens(destination, token, amount); + } + } else { + // Send native token + uint256 amount = address(this).balance; + if (amount > 0) { + destination.sendValue(amount); + emit DrainedNative(destination, amount); + } + } + } + + function _requireSelf() internal view { + // Must be called by this contract to ensure that this cannot be triggered without the explicit consent of the + // depositor (for a valid relay). + if (msg.sender != address(this)) revert NotSelf(); + } +} diff --git a/src/stargate/StargateFeeReceiver.sol b/src/stargate/StargateFeeReceiver.sol new file mode 100644 index 0000000..39bf126 --- /dev/null +++ b/src/stargate/StargateFeeReceiver.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {ILayerZeroComposer} from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol"; +import {OFTComposeMsgCodec} from "@layerzerolabs/lz-evm-oapp-v2/contracts/oft/libs/OFTComposeMsgCodec.sol"; +import {MulticallHandler} from "../library/MulticallHandler.sol"; + +contract StargateFeeReceiver is ILayerZeroComposer, MulticallHandler { + address public immutable endpoint; + + constructor(address _endpoint) { + endpoint = _endpoint; + } + + function lzCompose( + address, // _from + bytes32, // _guid + bytes calldata _message, + address, // _executor + bytes calldata // _extraData + ) external payable override { + require(msg.sender == endpoint, "!endpoint"); + + // Decode message + bytes memory composeMsg = OFTComposeMsgCodec.composeMsg(_message); + Instructions memory instructions = abi.decode(composeMsg, (Instructions)); + + // If there is no fallback recipient, call and revert if the inner call fails. + if (instructions.fallbackRecipient == address(0)) { + this.attemptCalls(instructions.calls); + return; + } + + // Otherwise, try the call and send to the fallback recipient if any tokens are leftover. + (bool success,) = address(this).call(abi.encodeCall(this.attemptCalls, (instructions.calls))); + if (!success) { + emit CallsFailed(instructions.calls, instructions.fallbackRecipient); + } + + // Get the token address from last call + address token = address(0); + Call memory last = instructions.calls[instructions.calls.length - 1]; + if (last.value == 0 && last.callData.length != 0) { + token = last.target; + } + // If there are leftover tokens, send them to the fallback recipient regardless of execution success. + _drainRemainingTokens(token, payable(instructions.fallbackRecipient)); + } + + receive() external payable {} + + fallback() external payable {} +} diff --git a/bsc/hub_reader/test/HubReader.t.sol b/test/hub_reader/HubReader.t.sol similarity index 98% rename from bsc/hub_reader/test/HubReader.t.sol rename to test/hub_reader/HubReader.t.sol index 55887ae..c97fc95 100644 --- a/bsc/hub_reader/test/HubReader.t.sol +++ b/test/hub_reader/HubReader.t.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.13; import {Test, console} from "forge-std/Test.sol"; -import {HubReader, Validator, Delegation, Undelegation} from "../src/HubReader.sol"; +import {HubReader, Validator, Delegation, Undelegation} from "../../src/hub_reader/HubReader.sol"; contract ValidatorsTest is Test { HubReader public reader;