{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct Multicall3.Call[]","name":"calls","type":"tuple[]"}],"name":"aggregate","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes[]","name":"returnData","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"allowFailure","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct Multicall3.Call3[]","name":"calls","type":"tuple[]"}],"name":"aggregate3","outputs":[{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"internalType":"struct Multicall3.Result[]","name":"returnData","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"allowFailure","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct Multicall3.Call3Value[]","name":"calls","type":"tuple[]"}],"name":"aggregate3Value","outputs":[{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"internalType":"struct Multicall3.Result[]","name":"returnData","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct Multicall3.Call[]","name":"calls","type":"tuple[]"}],"name":"blockAndAggregate","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"internalType":"struct Multicall3.Result[]","name":"returnData","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getBasefee","outputs":[{"internalType":"uint256","name":"basefee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getBlockHash","outputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockNumber","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"chainid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBlockCoinbase","outputs":[{"internalType":"address","name":"coinbase","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBlockDifficulty","outputs":[{"internalType":"uint256","name":"difficulty","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBlockGasLimit","outputs":[{"internalType":"uint256","name":"gaslimit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBlockTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getEthBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastBlockHash","outputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"requireSuccess","type":"bool"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct Multicall3.Call[]","name":"calls","type":"tuple[]"}],"name":"tryAggregate","outputs":[{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"internalType":"struct Multicall3.Result[]","name":"returnData","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"requireSuccess","type":"bool"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct Multicall3.Call[]","name":"calls","type":"tuple[]"}],"name":"tryBlockAndAggregate","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"internalType":"struct Multicall3.Result[]","name":"returnData","type":"tuple[]"}],"stateMutability":"payable","type":"function"}],"devdoc":{"author":"Michael Elliot <mike@makerdao.com>Joshua Levine <joshua@makerdao.com>Nick Johnson <arachnid@notdot.net>Andreas Bigger <andreas@nascent.xyz>Matt Solomon <matt@mattsolomon.dev>","details":"Multicall & Multicall2 backwards-compatibleAggregate methods are marked `payable` to save 24 gas per call","kind":"dev","methods":{"aggregate((address,bytes)[])":{"params":{"calls":"An array of Call structs"},"returns":{"blockNumber":"The block number where the calls were executed","returnData":"An array of bytes containing the responses"}},"aggregate3((address,bool,bytes)[])":{"params":{"calls":"An array of Call3 structs"},"returns":{"returnData":"An array of Result structs"}},"aggregate3Value((address,bool,uint256,bytes)[])":{"params":{"calls":"An array of Call3Value structs"},"returns":{"returnData":"An array of Result structs"}},"blockAndAggregate((address,bytes)[])":{"params":{"calls":"An array of Call structs"},"returns":{"blockHash":"The hash of the block where the calls were executed","blockNumber":"The block number where the calls were executed","returnData":"An array of Result structs"}},"getBlockHash(uint256)":{"params":{"blockNumber":"The block number"}},"tryAggregate(bool,(address,bytes)[])":{"params":{"calls":"An array of Call structs","requireSuccess":"If true, require all calls to succeed"},"returns":{"returnData":"An array of Result structs"}},"tryBlockAndAggregate(bool,(address,bytes)[])":{"params":{"calls":"An array of Call structs"},"returns":{"blockHash":"The hash of the block where the calls were executed","blockNumber":"The block number where the calls were executed","returnData":"An array of Result structs"}}},"title":"Multicall3","version":1},"userdoc":{"kind":"user","methods":{"aggregate((address,bytes)[])":{"notice":"Backwards-compatible call aggregation with Multicall"},"aggregate3((address,bool,bytes)[])":{"notice":"Aggregate calls, ensuring each returns success if required"},"aggregate3Value((address,bool,uint256,bytes)[])":{"notice":"Aggregate calls with a msg valueReverts if msg.value is less than the sum of the call values"},"blockAndAggregate((address,bytes)[])":{"notice":"Backwards-compatible with Multicall2Aggregate calls and allow failures using tryAggregate"},"getBasefee()":{"notice":"Gets the base fee of the given blockCan revert if the BASEFEE opcode is not implemented by the given chain"},"getBlockHash(uint256)":{"notice":"Returns the block hash for the given block number"},"getBlockNumber()":{"notice":"Returns the block number"},"getChainId()":{"notice":"Returns the chain id"},"getCurrentBlockCoinbase()":{"notice":"Returns the block coinbase"},"getCurrentBlockDifficulty()":{"notice":"Returns the block difficulty"},"getCurrentBlockGasLimit()":{"notice":"Returns the block gas limit"},"getCurrentBlockTimestamp()":{"notice":"Returns the block timestamp"},"getEthBalance(address)":{"notice":"Returns the (ETH) balance of a given address"},"getLastBlockHash()":{"notice":"Returns the block hash of the last block"},"tryAggregate(bool,(address,bytes)[])":{"notice":"Backwards-compatible with Multicall2Aggregate calls without requiring success"},"tryBlockAndAggregate(bool,(address,bytes)[])":{"notice":"Backwards-compatible with Multicall2Aggregate calls and allow failures using tryAggregate"}},"notice":"Aggregate results from multiple function calls","version":1}},"settings":{"compilationTarget":{"Multicall3.sol":"Multicall3"},"evmVersion":"london","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":10000000},"remappings":[]},"sources":{"Multicall3.sol":{"keccak256":"0x95dfd0a2dd6626c7119ff7c3f214d56b289145f81a0521cd93a6252a326966f6","license":"MIT","urls":["bzz-raw://ead513cb13fe5373523cb3e1f3f1a1052791503269f4cc22e5e6177ed57d03ae","dweb:/ipfs/Qmd5sRoq3rxHpBkcHr4baM2zP6Sud6eAL7AFoBbizFnWji"]}},"version":1}