{
  "_format": "hh-sol-artifact-1",
  "contractName": "Multicall",
  "sourceName": "contracts/mainContracts/Multicall.sol",
  "abi": [
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "callData",
              "type": "bytes"
            }
          ],
          "internalType": "struct Multicall.Call[]",
          "name": "calls",
          "type": "tuple[]"
        }
      ],
      "name": "aggregate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        },
        {
          "internalType": "bytes[]",
          "name": "returnData",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "callData",
              "type": "bytes"
            }
          ],
          "internalType": "struct Multicall.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 Multicall.Result[]",
          "name": "returnData",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "nonpayable",
      "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": "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 Multicall.Call[]",
          "name": "calls",
          "type": "tuple[]"
        }
      ],
      "name": "tryAggregate",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "success",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "returnData",
              "type": "bytes"
            }
          ],
          "internalType": "struct Multicall.Result[]",
          "name": "returnData",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "requireSuccess",
          "type": "bool"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "callData",
              "type": "bytes"
            }
          ],
          "internalType": "struct Multicall.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 Multicall.Result[]",
          "name": "returnData",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50610a3c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806372425d9d11610081578063bce38bd71161005b578063bce38bd714610182578063c3077fa9146101a2578063ee82ac5e146101b5576100d4565b806372425d9d1461015d57806386d516e814610165578063a8b0574e1461016d576100d4565b8063399542e9116100b2578063399542e91461012057806342cbb15c146101425780634d2301cc1461014a576100d4565b80630f28c97d146100d9578063252dba42146100f757806327e86d6e14610118575b600080fd5b6100e16101c8565b6040516100ee9190610892565b60405180910390f35b61010a6101053660046106c9565b6101cc565b6040516100ee92919061092d565b6100e1610331565b61013361012e366004610704565b610358565b6040516100ee939291906109b3565b6100e1610370565b6100e16101583660046106a8565b610374565b6100e161038e565b6100e1610392565b610175610396565b6040516100ee919061085e565b610195610190366004610704565b61039a565b6040516100ee919061087f565b6101336101b03660046106c9565b610516565b6100e16101c3366004610756565b610533565b4290565b8051439060609067ffffffffffffffff811180156101e957600080fd5b5060405190808252806020026020018201604052801561021d57816020015b60608152602001906001900390816102085790505b50905060005b835181101561032b5760008085838151811061023b57fe5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1686848151811061026957fe5b6020026020010151602001516040516102829190610842565b6000604051808303816000865af19150503d80600081146102bf576040519150601f19603f3d011682016040523d82523d6000602084013e6102c4565b606091505b509150915081610309576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610300906108f8565b60405180910390fd5b8084848151811061031657fe5b60209081029190910101525050600101610223565b50915091565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff43014090565b4380406060610367858561039a565b90509250925092565b4390565b73ffffffffffffffffffffffffffffffffffffffff163190565b4490565b4590565b4190565b6060815167ffffffffffffffff811180156103b457600080fd5b506040519080825280602002602001820160405280156103ee57816020015b6103db610537565b8152602001906001900390816103d35790505b50905060005b825181101561050f5760008084838151811061040c57fe5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1685848151811061043a57fe5b6020026020010151602001516040516104539190610842565b6000604051808303816000865af19150503d8060008114610490576040519150601f19603f3d011682016040523d82523d6000602084013e610495565b606091505b509150915085156104d757816104d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103009061089b565b60405180604001604052808315158152602001828152508484815181106104fa57fe5b602090810291909101015250506001016103f4565b5092915050565b6000806060610526600185610358565b9196909550909350915050565b4090565b60408051808201909152600081526060602082015290565b803573ffffffffffffffffffffffffffffffffffffffff8116811461057357600080fd5b919050565b600082601f830112610588578081fd5b8135602067ffffffffffffffff8083111561059f57fe5b6105ac82838502016109db565b83815282810190868401865b8681101561069a578135890160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181848f030112156105f7578a8bfd5b81518281018181108a8211171561060a57fe5b8352610617848b0161054f565b81528284013589811115610629578c8dfd5b8085019450508d603f85011261063d578b8cfd5b898401358981111561064b57fe5b61065b8b84601f840116016109db565b92508083528e84828701011115610670578c8dfd5b808486018c85013782018a018c9052808a01919091528652505092850192908501906001016105b8565b509098975050505050505050565b6000602082840312156106b9578081fd5b6106c28261054f565b9392505050565b6000602082840312156106da578081fd5b813567ffffffffffffffff8111156106f0578182fd5b6106fc84828501610578565b949350505050565b60008060408385031215610716578081fd5b82358015158114610725578182fd5b9150602083013567ffffffffffffffff811115610740578182fd5b61074c85828601610578565b9150509250929050565b600060208284031215610767578081fd5b5035919050565b60008282518085526020808601955080818302840101818601855b848110156107eb578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018952815180511515845284015160408585018190526107d7818601836107f8565b9a86019a9450505090830190600101610789565b5090979650505050505050565b600081518084526108108160208601602086016109ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516108548184602087016109ff565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6000602082526106c2602083018461076e565b90815260200190565b60208082526021908201527f4d756c746963616c6c32206167677265676174653a2063616c6c206661696c6560408201527f6400000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4d756c746963616c6c206167677265676174653a2063616c6c206661696c6564604082015260600190565b600060408201848352602060408185015281855180845260608601915060608382028701019350828701855b828110156109a5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08887030184526109938683516107f8565b95509284019290840190600101610959565b509398975050505050505050565b6000848252836020830152606060408301526109d2606083018461076e565b95945050505050565b60405181810167ffffffffffffffff811182821017156109f757fe5b604052919050565b60005b83811015610a1a578181015183820152602001610a02565b83811115610a29576000848401525b5050505056fea164736f6c6343000706000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c806372425d9d11610081578063bce38bd71161005b578063bce38bd714610182578063c3077fa9146101a2578063ee82ac5e146101b5576100d4565b806372425d9d1461015d57806386d516e814610165578063a8b0574e1461016d576100d4565b8063399542e9116100b2578063399542e91461012057806342cbb15c146101425780634d2301cc1461014a576100d4565b80630f28c97d146100d9578063252dba42146100f757806327e86d6e14610118575b600080fd5b6100e16101c8565b6040516100ee9190610892565b60405180910390f35b61010a6101053660046106c9565b6101cc565b6040516100ee92919061092d565b6100e1610331565b61013361012e366004610704565b610358565b6040516100ee939291906109b3565b6100e1610370565b6100e16101583660046106a8565b610374565b6100e161038e565b6100e1610392565b610175610396565b6040516100ee919061085e565b610195610190366004610704565b61039a565b6040516100ee919061087f565b6101336101b03660046106c9565b610516565b6100e16101c3366004610756565b610533565b4290565b8051439060609067ffffffffffffffff811180156101e957600080fd5b5060405190808252806020026020018201604052801561021d57816020015b60608152602001906001900390816102085790505b50905060005b835181101561032b5760008085838151811061023b57fe5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1686848151811061026957fe5b6020026020010151602001516040516102829190610842565b6000604051808303816000865af19150503d80600081146102bf576040519150601f19603f3d011682016040523d82523d6000602084013e6102c4565b606091505b509150915081610309576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610300906108f8565b60405180910390fd5b8084848151811061031657fe5b60209081029190910101525050600101610223565b50915091565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff43014090565b4380406060610367858561039a565b90509250925092565b4390565b73ffffffffffffffffffffffffffffffffffffffff163190565b4490565b4590565b4190565b6060815167ffffffffffffffff811180156103b457600080fd5b506040519080825280602002602001820160405280156103ee57816020015b6103db610537565b8152602001906001900390816103d35790505b50905060005b825181101561050f5760008084838151811061040c57fe5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1685848151811061043a57fe5b6020026020010151602001516040516104539190610842565b6000604051808303816000865af19150503d8060008114610490576040519150601f19603f3d011682016040523d82523d6000602084013e610495565b606091505b509150915085156104d757816104d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103009061089b565b60405180604001604052808315158152602001828152508484815181106104fa57fe5b602090810291909101015250506001016103f4565b5092915050565b6000806060610526600185610358565b9196909550909350915050565b4090565b60408051808201909152600081526060602082015290565b803573ffffffffffffffffffffffffffffffffffffffff8116811461057357600080fd5b919050565b600082601f830112610588578081fd5b8135602067ffffffffffffffff8083111561059f57fe5b6105ac82838502016109db565b83815282810190868401865b8681101561069a578135890160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181848f030112156105f7578a8bfd5b81518281018181108a8211171561060a57fe5b8352610617848b0161054f565b81528284013589811115610629578c8dfd5b8085019450508d603f85011261063d578b8cfd5b898401358981111561064b57fe5b61065b8b84601f840116016109db565b92508083528e84828701011115610670578c8dfd5b808486018c85013782018a018c9052808a01919091528652505092850192908501906001016105b8565b509098975050505050505050565b6000602082840312156106b9578081fd5b6106c28261054f565b9392505050565b6000602082840312156106da578081fd5b813567ffffffffffffffff8111156106f0578182fd5b6106fc84828501610578565b949350505050565b60008060408385031215610716578081fd5b82358015158114610725578182fd5b9150602083013567ffffffffffffffff811115610740578182fd5b61074c85828601610578565b9150509250929050565b600060208284031215610767578081fd5b5035919050565b60008282518085526020808601955080818302840101818601855b848110156107eb578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018952815180511515845284015160408585018190526107d7818601836107f8565b9a86019a9450505090830190600101610789565b5090979650505050505050565b600081518084526108108160208601602086016109ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516108548184602087016109ff565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6000602082526106c2602083018461076e565b90815260200190565b60208082526021908201527f4d756c746963616c6c32206167677265676174653a2063616c6c206661696c6560408201527f6400000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4d756c746963616c6c206167677265676174653a2063616c6c206661696c6564604082015260600190565b600060408201848352602060408185015281855180845260608601915060608382028701019350828701855b828110156109a5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08887030184526109938683516107f8565b95509284019290840190600101610959565b509398975050505050505050565b6000848252836020830152606060408301526109d2606083018461076e565b95945050505050565b60405181810167ffffffffffffffff811182821017156109f757fe5b604052919050565b60005b83811015610a1a578181015183820152602001610a02565b83811115610a29576000848401525b5050505056fea164736f6c6343000706000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
