Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- Multicall2
- Optimization enabled
- true
- Compiler version
- v0.8.9+commit.e5eed63a
- Optimization runs
- 999999
- EVM Version
- default
- Verified at
- 2022-05-25T19:49:02.836375Z
Contract source code
// Sources flattened with hardhat v2.8.4 https://hardhat.org // File contracts/Multicall2.sol // SPDX-License-Identifier: MIT // Derived from https://github.com/makerdao/multicall/blob/master/src/Multicall2.sol pragma solidity ^0.8.0; pragma experimental ABIEncoderV2; /// @title Multicall2 - Aggregate results from multiple read-only function calls /// @author Michael Elliot <mike@makerdao.com> /// @author Joshua Levine <joshua@makerdao.com> /// @author Nick Johnson <arachnid@notdot.net> contract Multicall2 { struct Call { address target; bytes callData; } struct Result { bool success; bytes returnData; } function aggregate(Call[] memory calls) public returns (uint256 blockNumber, bytes[] memory returnData) { blockNumber = block.number; returnData = new bytes[](calls.length); for (uint256 i = 0; i < calls.length; i++) { (bool success, bytes memory ret) = calls[i].target.call( calls[i].callData ); require(success, "Multicall aggregate: call failed"); returnData[i] = ret; } } function blockAndAggregate(Call[] memory calls) public returns ( uint256 blockNumber, bytes32 blockHash, Result[] memory returnData ) { (blockNumber, blockHash, returnData) = tryBlockAndAggregate( true, calls ); } function getBlockHash(uint256 blockNumber) public view returns (bytes32 blockHash) { blockHash = blockhash(blockNumber); } function getBlockNumber() public view returns (uint256 blockNumber) { blockNumber = block.number; } function getCurrentBlockCoinbase() public view returns (address coinbase) { coinbase = block.coinbase; } function getCurrentBlockDifficulty() public view returns (uint256 difficulty) { difficulty = block.difficulty; } function getCurrentBlockGasLimit() public view returns (uint256 gaslimit) { gaslimit = block.gaslimit; } function getCurrentBlockTimestamp() public view returns (uint256 timestamp) { timestamp = block.timestamp; } function getEthBalance(address addr) public view returns (uint256 balance) { balance = addr.balance; } function getLastBlockHash() public view returns (bytes32 blockHash) { blockHash = blockhash(block.number - 1); } function tryAggregate(bool requireSuccess, Call[] memory calls) public returns (Result[] memory returnData) { returnData = new Result[](calls.length); for (uint256 i = 0; i < calls.length; i++) { (bool success, bytes memory ret) = calls[i].target.call( calls[i].callData ); if (requireSuccess) { require(success, "Multicall2 aggregate: call failed"); } returnData[i] = Result(success, ret); } } function tryBlockAndAggregate(bool requireSuccess, Call[] memory calls) public returns ( uint256 blockNumber, bytes32 blockHash, Result[] memory returnData ) { blockNumber = block.number; blockHash = blockhash(block.number); returnData = tryAggregate(requireSuccess, calls); } }
Contract ABI
[{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"blockNumber","internalType":"uint256"},{"type":"bytes[]","name":"returnData","internalType":"bytes[]"}],"name":"aggregate","inputs":[{"type":"tuple[]","name":"calls","internalType":"struct Multicall2.Call[]","components":[{"type":"address","name":"target","internalType":"address"},{"type":"bytes","name":"callData","internalType":"bytes"}]}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"blockNumber","internalType":"uint256"},{"type":"bytes32","name":"blockHash","internalType":"bytes32"},{"type":"tuple[]","name":"returnData","internalType":"struct Multicall2.Result[]","components":[{"type":"bool","name":"success","internalType":"bool"},{"type":"bytes","name":"returnData","internalType":"bytes"}]}],"name":"blockAndAggregate","inputs":[{"type":"tuple[]","name":"calls","internalType":"struct Multicall2.Call[]","components":[{"type":"address","name":"target","internalType":"address"},{"type":"bytes","name":"callData","internalType":"bytes"}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"blockHash","internalType":"bytes32"}],"name":"getBlockHash","inputs":[{"type":"uint256","name":"blockNumber","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"blockNumber","internalType":"uint256"}],"name":"getBlockNumber","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"coinbase","internalType":"address"}],"name":"getCurrentBlockCoinbase","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"difficulty","internalType":"uint256"}],"name":"getCurrentBlockDifficulty","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"gaslimit","internalType":"uint256"}],"name":"getCurrentBlockGasLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"timestamp","internalType":"uint256"}],"name":"getCurrentBlockTimestamp","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"getEthBalance","inputs":[{"type":"address","name":"addr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"blockHash","internalType":"bytes32"}],"name":"getLastBlockHash","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"tuple[]","name":"returnData","internalType":"struct Multicall2.Result[]","components":[{"type":"bool","name":"success","internalType":"bool"},{"type":"bytes","name":"returnData","internalType":"bytes"}]}],"name":"tryAggregate","inputs":[{"type":"bool","name":"requireSuccess","internalType":"bool"},{"type":"tuple[]","name":"calls","internalType":"struct Multicall2.Call[]","components":[{"type":"address","name":"target","internalType":"address"},{"type":"bytes","name":"callData","internalType":"bytes"}]}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"blockNumber","internalType":"uint256"},{"type":"bytes32","name":"blockHash","internalType":"bytes32"},{"type":"tuple[]","name":"returnData","internalType":"struct Multicall2.Result[]","components":[{"type":"bool","name":"success","internalType":"bool"},{"type":"bytes","name":"returnData","internalType":"bytes"}]}],"name":"tryBlockAndAggregate","inputs":[{"type":"bool","name":"requireSuccess","internalType":"bool"},{"type":"tuple[]","name":"calls","internalType":"struct Multicall2.Call[]","components":[{"type":"address","name":"target","internalType":"address"},{"type":"bytes","name":"callData","internalType":"bytes"}]}]}]
Contract Creation Code
0x608060405234801561001057600080fd5b50610b55806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806372425d9d11610081578063bce38bd71161005b578063bce38bd714610181578063c3077fa9146101a1578063ee82ac5e146101b457600080fd5b806372425d9d1461016757806386d516e81461016d578063a8b0574e1461017357600080fd5b8063399542e9116100b2578063399542e91461011757806342cbb15c146101395780634d2301cc1461013f57600080fd5b80630f28c97d146100d9578063252dba42146100ee57806327e86d6e1461010f575b600080fd5b425b6040519081526020015b60405180910390f35b6101016100fc3660046107e3565b6101c6565b6040516100e592919061089a565b6100db610375565b61012a610125366004610922565b610388565b6040516100e5939291906109df565b436100db565b6100db61014d366004610a07565b73ffffffffffffffffffffffffffffffffffffffff163190565b446100db565b456100db565b6040514181526020016100e5565b61019461018f366004610922565b6103a0565b6040516100e59190610a29565b61012a6101af3660046107e3565b61059d565b6100db6101c2366004610a3c565b4090565b8051439060609067ffffffffffffffff8111156101e5576101e56105ba565b60405190808252806020026020018201604052801561021857816020015b60608152602001906001900390816102035790505b50905060005b835181101561036f5760008085838151811061023c5761023c610a55565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1686848151811061027057610270610a55565b6020026020010151602001516040516102899190610a84565b6000604051808303816000865af19150503d80600081146102c6576040519150601f19603f3d011682016040523d82523d6000602084013e6102cb565b606091505b50915091508161033c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4d756c746963616c6c206167677265676174653a2063616c6c206661696c656460448201526064015b60405180910390fd5b8084848151811061034f5761034f610a55565b60200260200101819052505050808061036790610acf565b91505061021e565b50915091565b6000610382600143610b08565b40905090565b438040606061039785856103a0565b90509250925092565b6060815167ffffffffffffffff8111156103bc576103bc6105ba565b60405190808252806020026020018201604052801561040257816020015b6040805180820190915260008152606060208201528152602001906001900390816103da5790505b50905060005b82518110156105965760008084838151811061042657610426610a55565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1685848151811061045a5761045a610a55565b6020026020010151602001516040516104739190610a84565b6000604051808303816000865af19150503d80600081146104b0576040519150601f19603f3d011682016040523d82523d6000602084013e6104b5565b606091505b5091509150851561054d578161054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4d756c746963616c6c32206167677265676174653a2063616c6c206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610333565b604051806040016040528083151581526020018281525084848151811061057657610576610a55565b60200260200101819052505050808061058e90610acf565b915050610408565b5092915050565b60008060606105ad600185610388565b9196909550909350915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561060c5761060c6105ba565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610659576106596105ba565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461068557600080fd5b919050565b6000601f838184011261069c57600080fd5b8235602067ffffffffffffffff808311156106b9576106b96105ba565b8260051b6106c8838201610612565b93845286810183019383810190898611156106e257600080fd5b84890192505b858310156107d6578235848111156107005760008081fd5b890160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828d0381018213156107375760008081fd5b61073f6105e9565b61074a898501610661565b8152828401358881111561075e5760008081fd5b8085019450508d603f8501126107745760008081fd5b8884013588811115610788576107886105ba565b6107978a848e84011601610612565b92508083528e848287010111156107ae5760008081fd5b808486018b85013760009083018a0152808901919091528452505091840191908401906106e8565b9998505050505050505050565b6000602082840312156107f557600080fd5b813567ffffffffffffffff81111561080c57600080fd5b6108188482850161068a565b949350505050565b60005b8381101561083b578181015183820152602001610823565b8381111561084a576000848401525b50505050565b60008151808452610868816020860160208601610820565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610914577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610902868351610850565b955092840192908401906001016108c8565b509398975050505050505050565b6000806040838503121561093557600080fd5b8235801515811461094557600080fd5b9150602083013567ffffffffffffffff81111561096157600080fd5b61096d8582860161068a565b9150509250929050565b6000815180845260208085019450848260051b860182860160005b858110156109d2578383038952815180511515845285015160408685018190526109be81860183610850565b9a87019a9450505090840190600101610992565b5090979650505050505050565b8381528260208201526060604082015260006109fe6060830184610977565b95945050505050565b600060208284031215610a1957600080fd5b610a2282610661565b9392505050565b602081526000610a226020830184610977565b600060208284031215610a4e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008251610a96818460208701610820565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610b0157610b01610aa0565b5060010190565b600082821015610b1a57610b1a610aa0565b50039056fea26469706673582212205bf8b7ec224729565e4fca23c9a35da92428150ab78f1d1cd99c68219b0170b264736f6c63430008090033
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100d45760003560e01c806372425d9d11610081578063bce38bd71161005b578063bce38bd714610181578063c3077fa9146101a1578063ee82ac5e146101b457600080fd5b806372425d9d1461016757806386d516e81461016d578063a8b0574e1461017357600080fd5b8063399542e9116100b2578063399542e91461011757806342cbb15c146101395780634d2301cc1461013f57600080fd5b80630f28c97d146100d9578063252dba42146100ee57806327e86d6e1461010f575b600080fd5b425b6040519081526020015b60405180910390f35b6101016100fc3660046107e3565b6101c6565b6040516100e592919061089a565b6100db610375565b61012a610125366004610922565b610388565b6040516100e5939291906109df565b436100db565b6100db61014d366004610a07565b73ffffffffffffffffffffffffffffffffffffffff163190565b446100db565b456100db565b6040514181526020016100e5565b61019461018f366004610922565b6103a0565b6040516100e59190610a29565b61012a6101af3660046107e3565b61059d565b6100db6101c2366004610a3c565b4090565b8051439060609067ffffffffffffffff8111156101e5576101e56105ba565b60405190808252806020026020018201604052801561021857816020015b60608152602001906001900390816102035790505b50905060005b835181101561036f5760008085838151811061023c5761023c610a55565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1686848151811061027057610270610a55565b6020026020010151602001516040516102899190610a84565b6000604051808303816000865af19150503d80600081146102c6576040519150601f19603f3d011682016040523d82523d6000602084013e6102cb565b606091505b50915091508161033c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4d756c746963616c6c206167677265676174653a2063616c6c206661696c656460448201526064015b60405180910390fd5b8084848151811061034f5761034f610a55565b60200260200101819052505050808061036790610acf565b91505061021e565b50915091565b6000610382600143610b08565b40905090565b438040606061039785856103a0565b90509250925092565b6060815167ffffffffffffffff8111156103bc576103bc6105ba565b60405190808252806020026020018201604052801561040257816020015b6040805180820190915260008152606060208201528152602001906001900390816103da5790505b50905060005b82518110156105965760008084838151811061042657610426610a55565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1685848151811061045a5761045a610a55565b6020026020010151602001516040516104739190610a84565b6000604051808303816000865af19150503d80600081146104b0576040519150601f19603f3d011682016040523d82523d6000602084013e6104b5565b606091505b5091509150851561054d578161054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4d756c746963616c6c32206167677265676174653a2063616c6c206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610333565b604051806040016040528083151581526020018281525084848151811061057657610576610a55565b60200260200101819052505050808061058e90610acf565b915050610408565b5092915050565b60008060606105ad600185610388565b9196909550909350915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561060c5761060c6105ba565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610659576106596105ba565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461068557600080fd5b919050565b6000601f838184011261069c57600080fd5b8235602067ffffffffffffffff808311156106b9576106b96105ba565b8260051b6106c8838201610612565b93845286810183019383810190898611156106e257600080fd5b84890192505b858310156107d6578235848111156107005760008081fd5b890160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828d0381018213156107375760008081fd5b61073f6105e9565b61074a898501610661565b8152828401358881111561075e5760008081fd5b8085019450508d603f8501126107745760008081fd5b8884013588811115610788576107886105ba565b6107978a848e84011601610612565b92508083528e848287010111156107ae5760008081fd5b808486018b85013760009083018a0152808901919091528452505091840191908401906106e8565b9998505050505050505050565b6000602082840312156107f557600080fd5b813567ffffffffffffffff81111561080c57600080fd5b6108188482850161068a565b949350505050565b60005b8381101561083b578181015183820152602001610823565b8381111561084a576000848401525b50505050565b60008151808452610868816020860160208601610820565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610914577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610902868351610850565b955092840192908401906001016108c8565b509398975050505050505050565b6000806040838503121561093557600080fd5b8235801515811461094557600080fd5b9150602083013567ffffffffffffffff81111561096157600080fd5b61096d8582860161068a565b9150509250929050565b6000815180845260208085019450848260051b860182860160005b858110156109d2578383038952815180511515845285015160408685018190526109be81860183610850565b9a87019a9450505090840190600101610992565b5090979650505050505050565b8381528260208201526060604082015260006109fe6060830184610977565b95945050505050565b600060208284031215610a1957600080fd5b610a2282610661565b9392505050565b602081526000610a226020830184610977565b600060208284031215610a4e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008251610a96818460208701610820565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610b0157610b01610aa0565b5060010190565b600082821015610b1a57610b1a610aa0565b50039056fea26469706673582212205bf8b7ec224729565e4fca23c9a35da92428150ab78f1d1cd99c68219b0170b264736f6c63430008090033