forked from omnes-tech/go-multicall
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata.go
More file actions
22 lines (13 loc) · 30.6 KB
/
data.go
File metadata and controls
22 lines (13 loc) · 30.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package multicall
import (
"time"
"github.com/ethereum/go-ethereum/common"
)
var GENERAL_MULTICALL_ADDRESS = common.HexToAddress("0xcA11bde05977b3631167028862bE2a173976CA11")
const GENERAL_MULTICALL_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\"}]"
var OMNES_MULTICALL_ADDRESS = common.Address{}
// const OMNES_MULTICALL_ABI = "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"aggregateCalls\",\"inputs\":[{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"struct Call[]\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"returnDatas\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"aggregateStatic\",\"inputs\":[{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"struct StaticCall[]\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"returnData\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddressesData\",\"inputs\":[{\"name\":\"targets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[{\"name\":\"balances\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"codeLengths\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBalances\",\"inputs\":[{\"name\":\"targets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[{\"name\":\"balances\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCodeLengths\",\"inputs\":[{\"name\":\"targets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[{\"name\":\"lengths\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"simulateCalls\",\"inputs\":[{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"struct Call[]\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"tryAggregateCalls\",\"inputs\":[{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"struct MultiCall.CallWithFailure[]\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requireSuccess\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"outputs\":[{\"name\":\"results\",\"type\":\"tuple[]\",\"internalType\":\"struct MultiCall.Result[]\",\"components\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"returnData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"tryAggregateCalls\",\"inputs\":[{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"struct Call[]\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"requireSuccess\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"results\",\"type\":\"tuple[]\",\"internalType\":\"struct MultiCall.Result[]\",\"components\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"returnData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"tryAggregateStatic\",\"inputs\":[{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"struct StaticCall[]\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"requireSuccess\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"returnData\",\"type\":\"tuple[]\",\"internalType\":\"struct MultiCall.Result[]\",\"components\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"returnData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tryAggregateStatic\",\"inputs\":[{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"struct StaticCallWithFailure[]\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"requireSuccess\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"outputs\":[{\"name\":\"returnData\",\"type\":\"tuple[]\",\"internalType\":\"struct MultiCall.Result[]\",\"components\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"returnData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"MultiCall__CallFailed\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"MultiCall__SendingValueNotAllowed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MultiCall__Simulation\",\"inputs\":[{\"name\":\"results\",\"type\":\"tuple[]\",\"internalType\":\"struct MultiCall.SimulatedResult[]\",\"components\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"returnData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasUsed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"type\":\"error\",\"name\":\"MultiCall__StaticCallFailed\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]"
// const DEPLOYLESS_MULTICALL_ABI = "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"callData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"error\",\"name\":\"MultiCallCodec__InvalidStaticCallType\",\"inputs\":[{\"name\":\"type_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"MultiCall__SendingValueNotAllowed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MultiCall__Simulation\",\"inputs\":[{\"name\":\"results\",\"type\":\"tuple[]\",\"internalType\":\"struct DeploylessMultiCall.SimulatedResult[]\",\"components\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"returnData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasUsed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"type\":\"error\",\"name\":\"MultiCall__StaticCallFailed\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]"
const DEPLOYLESS_MULTICALL_BYTECODE = "0x608060405260405161229938038061229983398181016040528101906100259190611374565b5f5f5f5f5f5f61003a876103d960201b60201c565b95509550955095509550955060605f600781111561005b5761005a6113bb565b5b87600781111561006e5761006d6113bb565b5b03610087576100828361063f60201b60201c565b6103d1565b6001600781111561009b5761009a6113bb565b5b8760078111156100ae576100ad6113bb565b5b036100ed575f6100c38761080060201b60201c565b9050806040516020016100d691906114f5565b6040516020818303038152906040529150506103d0565b60026007811115610101576101006113bb565b5b876007811115610114576101136113bb565b5b03610154575f61012a87876109a960201b60201c565b90508060405160200161013d9190611624565b6040516020818303038152906040529150506103cf565b60036007811115610168576101676113bb565b5b87600781111561017b5761017a6113bb565b5b036101ba575f61019085610b7260201b60201c565b9050806040516020016101a39190611624565b6040516020818303038152906040529150506103ce565b600460078111156101ce576101cd6113bb565b5b8760078111156101e1576101e06113bb565b5b03610220575f6101f683610d6460201b60201c565b9050806040516020016102099190611704565b6040516020818303038152906040529150506103cd565b60056007811115610234576102336113bb565b5b876007811115610247576102466113bb565b5b03610286575f61025c83610e3b60201b60201c565b90508060405160200161026f9190611704565b6040516020818303038152906040529150506103cc565b6006600781111561029a576102996113bb565b5b8760078111156102ad576102ac6113bb565b5b036102f2575f5f6102c384610f1260201b60201c565b9150915081816040516020016102da929190611724565b604051602081830303815290604052925050506103cb565b600780811115610305576103046113bb565b5b876007811115610318576103176113bb565b5b036103ca575f5f5f5f5f5f5f5f5f61033461109f60201b60201c565b9850985098509850985098509850985098505f89898989896040516020016103609594939291906117bf565b60405160208183030381529060405290505f858585856040516020016103899493929190611810565b604051602081830303815290604052905081816040516020016103ad92919061188d565b6040516020818303038152906040529b5050505050505050505050505b5b5b5b5b5b5b5b805160208201f35b5f60605f60608060605f875f815181106103f6576103f56118b0565b5b602001015160f81c60f81b60f81c9050606060078081111561041b5761041a6113bb565b5b60ff168260ff161461044857610445896001808c5161043a919061190a565b6110cf60201b60201c565b90505b6001600781111561045c5761045b6113bb565b5b60ff168260ff1603610483578080602001905181019061047c9190611aba565b965061061c565b60026007811115610497576104966113bb565b5b60ff168260ff16036104c457808060200190518101906104b79190611b2b565b809750819850505061061b565b600360078111156104d8576104d76113bb565b5b60ff168260ff16036104ff57808060200190518101906104f89190611ce0565b945061061a565b5f6007811115610512576105116113bb565b5b60ff168260ff160361053957808060200190518101906105329190611eac565b9350610619565b6004600781111561054d5761054c6113bb565b5b60ff168260ff16148061057857506005600781111561056f5761056e6113bb565b5b60ff168260ff16145b8061059b575060066007811115610592576105916113bb565b5b60ff168260ff16145b156105bb57808060200190518101906105b49190611fb3565b9250610618565b6007808111156105ce576105cd6113bb565b5b60ff168260ff161461061757816040517f654f0df700000000000000000000000000000000000000000000000000000000815260040161060e9190612015565b60405180910390fd5b5b5b5b5b5b8160ff166007811115610632576106316113bb565b5b9750505091939550919395565b5f815167ffffffffffffffff81111561065b5761065a611250565b5b60405190808252806020026020018201604052801561069457816020015b6106816111eb565b8152602001906001900390816106795790505b5090505f5f90505b82518110156107c2575f5a90505f5f8584815181106106be576106bd6118b0565b5b60200260200101515f015173ffffffffffffffffffffffffffffffffffffffff168685815181106106f2576106f16118b0565b5b602002602001015160400151878681518110610711576107106118b0565b5b60200260200101516020015160405161072a919061202e565b5f6040518083038185875af1925050503d805f8114610764576040519150601f19603f3d011682016040523d82523d5f602084013e610769565b606091505b5091509150604051806060016040528083151581526020018281526020015a85610793919061190a565b8152508585815181106107a9576107a86118b0565b5b602002602001018190525083600101935050505061069c565b50806040517fc6da632c0000000000000000000000000000000000000000000000000000000081526004016107f7919061214c565b60405180910390fd5b6060815167ffffffffffffffff81111561081d5761081c611250565b5b60405190808252806020026020018201604052801561085057816020015b606081526020019060019003908161083b5790505b5090505f825190505b5f8111156109a3575f83600183610870919061190a565b81518110610881576108806118b0565b5b60200260200101515f015173ffffffffffffffffffffffffffffffffffffffff16846001846108b0919061190a565b815181106108c1576108c06118b0565b5b6020026020010151602001516040516108da919061202e565b5f60405180830381855afa9150503d805f8114610912576040519150601f19603f3d011682016040523d82523d5f602084013e610917565b606091505b5084600185610926919061190a565b81518110610937576109366118b0565b5b60200260200101819052819250505080600183610954919061190a565b90610995576040517f9eadd6c500000000000000000000000000000000000000000000000000000000815260040161098c919061216c565b60405180910390fd5b508160019003915050610859565b50919050565b6060825167ffffffffffffffff8111156109c6576109c5611250565b5b6040519080825280602002602001820160405280156109ff57816020015b6109ec61120c565b8152602001906001900390816109e45790505b5090505f835190505b5f811115610b6b575f82600183610a1f919061190a565b81518110610a3057610a2f6118b0565b5b6020026020010151905084600183610a48919061190a565b81518110610a5957610a586118b0565b5b60200260200101515f015173ffffffffffffffffffffffffffffffffffffffff1685600184610a88919061190a565b81518110610a9957610a986118b0565b5b602002602001015160200151604051610ab2919061202e565b5f60405180830381855afa9150503d805f8114610aea576040519150601f19603f3d011682016040523d82523d5f602084013e610aef565b606091505b50825f0183602001829052821515151581525050508315610b5e57805f0151600183610b1b919061190a565b90610b5c576040517f9eadd6c5000000000000000000000000000000000000000000000000000000008152600401610b53919061216c565b60405180910390fd5b505b8160019003915050610a08565b5092915050565b6060815167ffffffffffffffff811115610b8f57610b8e611250565b5b604051908082528060200260200182016040528015610bc857816020015b610bb561120c565b815260200190600190039081610bad5790505b5090505f825190505b5f811115610d5e575f82600183610be8919061190a565b81518110610bf957610bf86118b0565b5b6020026020010151905083600183610c11919061190a565b81518110610c2257610c216118b0565b5b60200260200101515f015173ffffffffffffffffffffffffffffffffffffffff1684600184610c51919061190a565b81518110610c6257610c616118b0565b5b602002602001015160200151604051610c7b919061202e565b5f60405180830381855afa9150503d805f8114610cb3576040519150601f19603f3d011682016040523d82523d5f602084013e610cb8565b606091505b50825f01836020018290528215151515815250505083600183610cdb919061190a565b81518110610cec57610ceb6118b0565b5b60200260200101516040015115610d5157805f0151600183610d0e919061190a565b90610d4f576040517f9eadd6c5000000000000000000000000000000000000000000000000000000008152600401610d46919061216c565b60405180910390fd5b505b8160019003915050610bd1565b50919050565b6060815167ffffffffffffffff811115610d8157610d80611250565b5b604051908082528060200260200182016040528015610daf5781602001602082028036833780820191505090505b5090505f825190505b5f811115610e355782600182610dce919061190a565b81518110610ddf57610dde6118b0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163b82600183610e0c919061190a565b81518110610e1d57610e1c6118b0565b5b60200260200101818152505080600190039050610db8565b50919050565b6060815167ffffffffffffffff811115610e5857610e57611250565b5b604051908082528060200260200182016040528015610e865781602001602082028036833780820191505090505b5090505f825190505b5f811115610f0c5782600182610ea5919061190a565b81518110610eb657610eb56118b0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163182600183610ee3919061190a565b81518110610ef457610ef36118b0565b5b60200260200101818152505080600190039050610e8f565b50919050565b606080825167ffffffffffffffff811115610f3057610f2f611250565b5b604051908082528060200260200182016040528015610f5e5781602001602082028036833780820191505090505b509150825167ffffffffffffffff811115610f7c57610f7b611250565b5b604051908082528060200260200182016040528015610faa5781602001602082028036833780820191505090505b5090505f835190505b5f8111156110995783600182610fc9919061190a565b81518110610fda57610fd96118b0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163183600183611007919061190a565b81518110611018576110176118b0565b5b60200260200101818152505083600182611032919061190a565b81518110611043576110426118b0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163b82600183611070919061190a565b81518110611081576110806118b0565b5b60200260200101818152505080600190039050610fb3565b50915091565b5f5f5f5f5f5f5f5f5f4643434048414244453a985098509850985098509850985098509850909192939495969798565b606081601f836110df9190612185565b1015611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790612212565b60405180910390fd5b818361112c9190612185565b8451101561116f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111669061227a565b60405180910390fd5b606082155f811461118e5760405191505f8252602082016040526111df565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156111cc57805183526020830192506020810190506111af565b50868552601f19601f8301166040525050505b50809150509392505050565b60405180606001604052805f15158152602001606081526020015f81525090565b60405180604001604052805f15158152602001606081525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61128682611240565b810181811067ffffffffffffffff821117156112a5576112a4611250565b5b80604052505050565b5f6112b7611227565b90506112c3828261127d565b919050565b5f67ffffffffffffffff8211156112e2576112e1611250565b5b6112eb82611240565b9050602081019050919050565b8281835e5f83830152505050565b5f611318611313846112c8565b6112ae565b9050828152602081018484840111156113345761133361123c565b5b61133f8482856112f8565b509392505050565b5f82601f83011261135b5761135a611238565b5b815161136b848260208601611306565b91505092915050565b5f6020828403121561138957611388611230565b5b5f82015167ffffffffffffffff8111156113a6576113a5611234565b5b6113b284828501611347565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f61143582611411565b61143f818561141b565b935061144f8185602086016112f8565b61145881611240565b840191505092915050565b5f61146e838361142b565b905092915050565b5f602082019050919050565b5f61148c826113e8565b61149681856113f2565b9350836020820285016114a885611402565b805f5b858110156114e357848403895281516114c48582611463565b94506114cf83611476565b925060208a019950506001810190506114ab565b50829750879550505050505092915050565b5f6020820190508181035f83015261150d8184611482565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f8115159050919050565b6115528161153e565b82525050565b5f604083015f83015161156d5f860182611549565b5060208301518482036020860152611585828261142b565b9150508091505092915050565b5f61159d8383611558565b905092915050565b5f602082019050919050565b5f6115bb82611515565b6115c5818561151f565b9350836020820285016115d78561152f565b805f5b8581101561161257848403895281516115f38582611592565b94506115fe836115a5565b925060208a019950506001810190506115da565b50829750879550505050505092915050565b5f6020820190508181035f83015261163c81846115b1565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b61167f8161166d565b82525050565b5f6116908383611676565b60208301905092915050565b5f602082019050919050565b5f6116b282611644565b6116bc818561164e565b93506116c78361165e565b805f5b838110156116f75781516116de8882611685565b97506116e98361169c565b9250506001810190506116ca565b5085935050505092915050565b5f6020820190508181035f83015261171c81846116a8565b905092915050565b5f6040820190508181035f83015261173c81856116a8565b9050818103602083015261175081846116a8565b90509392505050565b6117628161166d565b82525050565b5f819050919050565b61177a81611768565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117a982611780565b9050919050565b6117b98161179f565b82525050565b5f60a0820190506117d25f830188611759565b6117df6020830187611759565b6117ec6040830186611771565b6117f96060830185611759565b61180660808301846117b0565b9695505050505050565b5f6080820190506118235f830187611759565b6118306020830186611759565b61183d6040830185611759565b61184a6060830184611759565b95945050505050565b5f81905092915050565b5f61186782611411565b6118718185611853565b93506118818185602086016112f8565b80840191505092915050565b5f611898828561185d565b91506118a4828461185d565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6119148261166d565b915061191f8361166d565b9250828203905081811115611937576119366118dd565b5b92915050565b5f67ffffffffffffffff82111561195757611956611250565b5b602082029050602081019050919050565b5f5ffd5b5f5ffd5b5f5ffd5b61197d8161179f565b8114611987575f5ffd5b50565b5f8151905061199881611974565b92915050565b5f604082840312156119b3576119b261196c565b5b6119bd60406112ae565b90505f6119cc8482850161198a565b5f83015250602082015167ffffffffffffffff8111156119ef576119ee611970565b5b6119fb84828501611347565b60208301525092915050565b5f611a19611a148461193d565b6112ae565b90508083825260208201905060208402830185811115611a3c57611a3b611968565b5b835b81811015611a8357805167ffffffffffffffff811115611a6157611a60611238565b5b808601611a6e898261199e565b85526020850194505050602081019050611a3e565b5050509392505050565b5f82601f830112611aa157611aa0611238565b5b8151611ab1848260208601611a07565b91505092915050565b5f60208284031215611acf57611ace611230565b5b5f82015167ffffffffffffffff811115611aec57611aeb611234565b5b611af884828501611a8d565b91505092915050565b611b0a8161153e565b8114611b14575f5ffd5b50565b5f81519050611b2581611b01565b92915050565b5f5f60408385031215611b4157611b40611230565b5b5f83015167ffffffffffffffff811115611b5e57611b5d611234565b5b611b6a85828601611a8d565b9250506020611b7b85828601611b17565b9150509250929050565b5f67ffffffffffffffff821115611b9f57611b9e611250565b5b602082029050602081019050919050565b5f60608284031215611bc557611bc461196c565b5b611bcf60606112ae565b90505f611bde8482850161198a565b5f83015250602082015167ffffffffffffffff811115611c0157611c00611970565b5b611c0d84828501611347565b6020830152506040611c2184828501611b17565b60408301525092915050565b5f611c3f611c3a84611b85565b6112ae565b90508083825260208201905060208402830185811115611c6257611c61611968565b5b835b81811015611ca957805167ffffffffffffffff811115611c8757611c86611238565b5b808601611c948982611bb0565b85526020850194505050602081019050611c64565b5050509392505050565b5f82601f830112611cc757611cc6611238565b5b8151611cd7848260208601611c2d565b91505092915050565b5f60208284031215611cf557611cf4611230565b5b5f82015167ffffffffffffffff811115611d1257611d11611234565b5b611d1e84828501611cb3565b91505092915050565b5f67ffffffffffffffff821115611d4157611d40611250565b5b602082029050602081019050919050565b611d5b8161166d565b8114611d65575f5ffd5b50565b5f81519050611d7681611d52565b92915050565b5f60608284031215611d9157611d9061196c565b5b611d9b60606112ae565b90505f611daa8482850161198a565b5f83015250602082015167ffffffffffffffff811115611dcd57611dcc611970565b5b611dd984828501611347565b6020830152506040611ded84828501611d68565b60408301525092915050565b5f611e0b611e0684611d27565b6112ae565b90508083825260208201905060208402830185811115611e2e57611e2d611968565b5b835b81811015611e7557805167ffffffffffffffff811115611e5357611e52611238565b5b808601611e608982611d7c565b85526020850194505050602081019050611e30565b5050509392505050565b5f82601f830112611e9357611e92611238565b5b8151611ea3848260208601611df9565b91505092915050565b5f60208284031215611ec157611ec0611230565b5b5f82015167ffffffffffffffff811115611ede57611edd611234565b5b611eea84828501611e7f565b91505092915050565b5f67ffffffffffffffff821115611f0d57611f0c611250565b5b602082029050602081019050919050565b5f611f30611f2b84611ef3565b6112ae565b90508083825260208201905060208402830185811115611f5357611f52611968565b5b835b81811015611f7c5780611f68888261198a565b845260208401935050602081019050611f55565b5050509392505050565b5f82601f830112611f9a57611f99611238565b5b8151611faa848260208601611f1e565b91505092915050565b5f60208284031215611fc857611fc7611230565b5b5f82015167ffffffffffffffff811115611fe557611fe4611234565b5b611ff184828501611f86565b91505092915050565b5f60ff82169050919050565b61200f81611ffa565b82525050565b5f6020820190506120285f830184612006565b92915050565b5f612039828461185d565b915081905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f606083015f8301516120825f860182611549565b506020830151848203602086015261209a828261142b565b91505060408301516120af6040860182611676565b508091505092915050565b5f6120c5838361206d565b905092915050565b5f602082019050919050565b5f6120e382612044565b6120ed818561204e565b9350836020820285016120ff8561205e565b805f5b8581101561213a578484038952815161211b85826120ba565b9450612126836120cd565b925060208a01995050600181019050612102565b50829750879550505050505092915050565b5f6020820190508181035f83015261216481846120d9565b905092915050565b5f60208201905061217f5f830184611759565b92915050565b5f61218f8261166d565b915061219a8361166d565b92508282019050808211156121b2576121b16118dd565b5b92915050565b5f82825260208201905092915050565b7f736c6963655f6f766572666c6f770000000000000000000000000000000000005f82015250565b5f6121fc600e836121b8565b9150612207826121c8565b602082019050919050565b5f6020820190508181035f830152612229816121f0565b9050919050565b7f736c6963655f6f75744f66426f756e64730000000000000000000000000000005f82015250565b5f6122646011836121b8565b915061226f82612230565b602082019050919050565b5f6020820190508181035f83015261229181612258565b905091905056fe"
var ZERO_ADDRESS = common.Address{}
const MINING_WAIT_DURATION = 600 * time.Second