From 481d197018e58035e118d7fca0eeb76497c4ab21 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Wed, 18 Sep 2024 13:02:55 +0300 Subject: [PATCH 01/23] Passing tests. Wired system contracts. --- contracts/generated/Address/Address.go | 2 +- .../ConstantSupplyERC20.go | 2 +- .../CrossChainMessenger.go | 2 +- contracts/generated/ECDSA/ECDSA.go | 2 +- .../generated/ERC1967Proxy/ERC1967Proxy.go | 368 ++++++ .../generated/ERC1967Utils/ERC1967Utils.go | 626 +++++++++ .../EthereumBridge/EthereumBridge.go | 2 +- .../GasConsumerBalance/GasConsumerBalance.go | 2 +- contracts/generated/Logger/Logger.go | 337 +++++ .../ManagementContract/ManagementContract.go | 2 +- contracts/generated/Math/Math.go | 2 +- .../generated/MerkleProof/MerkleProof.go | 2 +- .../MerkleTreeMessageBus.go | 2 +- contracts/generated/MessageBus/MessageBus.go | 2 +- contracts/generated/ObsERC20/ObsERC20.go | 2 +- .../generated/ObscuroBridge/ObscuroBridge.go | 2 +- contracts/generated/ProxyAdmin/ProxyAdmin.go | 481 +++++++ contracts/generated/SafeERC20/SafeERC20.go | 2 +- contracts/generated/Strings/Strings.go | 2 +- .../SystemDeployer/SystemDeployer.go | 338 +++++ .../TransactionDecoder/TransactionDecoder.go | 252 ++++ .../TransactionsAnalyzer.go | 1140 +++++++++++++++++ .../TransparentUpgradeableProxy.go | 503 ++++++++ .../generated/WrappedERC20/WrappedERC20.go | 2 +- contracts/generated/ZenBase/ZenBase.go | 1046 +++++++++++++++ contracts/hardhat.config.ts | 6 + contracts/src/system/Logger.sol | 12 + contracts/src/system/SystemDeployer.sol | 31 + contracts/src/system/TransactionDecoder.sol | 124 ++ contracts/src/system/TransactionsAnalyzer.sol | 74 ++ contracts/src/zen/ZenBase.sol | 72 ++ go/common/enclave.go | 3 +- go/common/log_events.go | 4 +- go/common/query_types.go | 11 +- go/enclave/components/batch_executor.go | 78 +- go/enclave/enclave.go | 15 +- go/enclave/nodetype/sequencer.go | 34 +- go/host/host.go | 16 +- go/host/rpc/clientapi/client_api_ten.go | 2 + go/obsclient/authclient.go | 42 +- go/rpc/encrypted_client.go | 4 +- integration/simulation/simulation.go | 24 +- 42 files changed, 5621 insertions(+), 54 deletions(-) create mode 100644 contracts/generated/ERC1967Proxy/ERC1967Proxy.go create mode 100644 contracts/generated/ERC1967Utils/ERC1967Utils.go create mode 100644 contracts/generated/Logger/Logger.go create mode 100644 contracts/generated/ProxyAdmin/ProxyAdmin.go create mode 100644 contracts/generated/SystemDeployer/SystemDeployer.go create mode 100644 contracts/generated/TransactionDecoder/TransactionDecoder.go create mode 100644 contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go create mode 100644 contracts/generated/TransparentUpgradeableProxy/TransparentUpgradeableProxy.go create mode 100644 contracts/generated/ZenBase/ZenBase.go create mode 100644 contracts/src/system/Logger.sol create mode 100644 contracts/src/system/SystemDeployer.sol create mode 100644 contracts/src/system/TransactionDecoder.sol create mode 100644 contracts/src/system/TransactionsAnalyzer.sol create mode 100644 contracts/src/zen/ZenBase.sol diff --git a/contracts/generated/Address/Address.go b/contracts/generated/Address/Address.go index 0fb6914e52..3623ac7a0f 100644 --- a/contracts/generated/Address/Address.go +++ b/contracts/generated/Address/Address.go @@ -32,7 +32,7 @@ var ( // AddressMetaData contains all meta data concerning the Address contract. var AddressMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205543785f00a1ad0ccec3edf301adba99ad1508e5063367a1bf5828ee7e8bfd4464736f6c63430008140033", + Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea264697066735822122001eed81e72a11a099b903c792c3e8a8228cdcfe17b57150dc23e2623905b92e464736f6c63430008140033", } // AddressABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go b/contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go index 1142cf1824..3188536282 100644 --- a/contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go +++ b/contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go @@ -32,7 +32,7 @@ var ( // ConstantSupplyERC20MetaData contains all meta data concerning the ConstantSupplyERC20 contract. var ConstantSupplyERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"initialSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162000c7738038062000c778339810160408190526200003491620002ab565b82826003620000448382620003ad565b506004620000538282620003ad565b5050506200006833826200007160201b60201c565b505050620004a1565b6001600160a01b038216620000a15760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b620000af60008383620000b3565b5050565b6001600160a01b038316620000e2578060026000828254620000d6919062000479565b90915550620001569050565b6001600160a01b03831660009081526020819052604090205481811015620001375760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000098565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620001745760028054829003905562000193565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001d991815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020e57600080fd5b81516001600160401b03808211156200022b576200022b620001e6565b604051601f8301601f19908116603f01168101908282118183101715620002565762000256620001e6565b816040528381526020925086838588010111156200027357600080fd5b600091505b8382101562000297578582018301518183018401529082019062000278565b600093810190920192909252949350505050565b600080600060608486031215620002c157600080fd5b83516001600160401b0380821115620002d957600080fd5b620002e787838801620001fc565b94506020860151915080821115620002fe57600080fd5b506200030d86828701620001fc565b925050604084015190509250925092565b600181811c908216806200033357607f821691505b6020821081036200035457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003a857600081815260208120601f850160051c81016020861015620003835750805b601f850160051c820191505b81811015620003a4578281556001016200038f565b5050505b505050565b81516001600160401b03811115620003c957620003c9620001e6565b620003e181620003da84546200031e565b846200035a565b602080601f831160018114620004195760008415620004005750858301515b600019600386901b1c1916600185901b178555620003a4565b600085815260208120601f198616915b828110156200044a5788860151825594840194600190910190840162000429565b5085821015620004695787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200049b57634e487b7160e01b600052601160045260246000fd5b92915050565b6107c680620004b16000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b4114610146578063a9059cbb1461014e578063dd62ed3e1461016157600080fd5b8063313ce5671461010e57806370a082311461011d57600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e957806323b872dd146100fb575b600080fd5b6100b061019a565b6040516100bd9190610610565b60405180910390f35b6100d96100d436600461067a565b61022c565b60405190151581526020016100bd565b6002545b6040519081526020016100bd565b6100d96101093660046106a4565b610246565b604051601281526020016100bd565b6100ed61012b3660046106e0565b6001600160a01b031660009081526020819052604090205490565b6100b061026a565b6100d961015c36600461067a565b610279565b6100ed61016f366004610702565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101a990610735565b80601f01602080910402602001604051908101604052809291908181526020018280546101d590610735565b80156102225780601f106101f757610100808354040283529160200191610222565b820191906000526020600020905b81548152906001019060200180831161020557829003601f168201915b5050505050905090565b60003361023a818585610287565b60019150505b92915050565b600033610254858285610299565b61025f858585610335565b506001949350505050565b6060600480546101a990610735565b60003361023a818585610335565b61029483838360016103c6565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461032f5781811015610320576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b61032f848484840360006103c6565b50505050565b6001600160a01b038316610378576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610317565b6001600160a01b0382166103bb576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610317565b6102948383836104cd565b6001600160a01b038416610409576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610317565b6001600160a01b03831661044c576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610317565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561032f57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104bf91815260200190565b60405180910390a350505050565b6001600160a01b0383166104f85780600260008282546104ed919061076f565b909155506105839050565b6001600160a01b03831660009081526020819052604090205481811015610564576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810182905260448101839052606401610317565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661059f576002805482900390556105be565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161060391815260200190565b60405180910390a3505050565b600060208083528351808285015260005b8181101561063d57858101830151858201604001528201610621565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461067557600080fd5b919050565b6000806040838503121561068d57600080fd5b6106968361065e565b946020939093013593505050565b6000806000606084860312156106b957600080fd5b6106c28461065e565b92506106d06020850161065e565b9150604084013590509250925092565b6000602082840312156106f257600080fd5b6106fb8261065e565b9392505050565b6000806040838503121561071557600080fd5b61071e8361065e565b915061072c6020840161065e565b90509250929050565b600181811c9082168061074957607f821691505b60208210810361076957634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024057634e487b7160e01b600052601160045260246000fdfea2646970667358221220dfee8b2508201459d014b985ef570589fb9fe2647a943251cbfaf253dc423e2764736f6c63430008140033", + Bin: "0x60806040523462000031576200001f6200001862000183565b91620001ab565b6040516109f8620006de82396109f890f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160401b0381116200006e57602090601f01601f19160190565b60005b838110620000be5750506000910152565b8181015183820152602001620000ad565b90929192620000e8620000e2826200008d565b62000074565b9381855260208501908284011162000031576200008b92620000aa565b9080601f83011215620000315781516200012292602001620000cf565b90565b9091606082840312620000315781516001600160401b0381116200003157836200015191840162000105565b602083015190936001600160401b038211620000315762000179816200012293860162000105565b9360400190505190565b620001a6620010d6803803806200019a8162000074565b92833981019062000125565b909192565b6200008b9291620001bc91620003c4565b3362000426565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620001fc575b6020831014620001f657565b620001c3565b91607f1691620001ea565b9160001960089290920291821b911b5b9181191691161790565b6200012262000122620001229290565b919062000246620001226200024f9362000221565b90835462000207565b9055565b6200008b9160009162000231565b8181106200026d575050565b806200027d600060019362000253565b0162000261565b9190601f81116200029457505050565b620002a86200008b93600052602060002090565b906020601f840181900483019310620002cc575b6020601f90910104019062000261565b9091508190620002bc565b90620002e1815190565b906001600160401b0382116200006e576200030982620003028554620001d9565b8562000284565b602090601f831160011462000348576200024f9291600091836200033c575b5050600019600883021c1916906002021790565b01519050388062000328565b601f198316916200035e85600052602060002090565b9260005b8181106200039f5750916002939185600196941062000385575b50505002019055565b01516000196008601f8516021c191690553880806200037c565b9193602060018192878701518155019501920162000362565b906200008b91620002d7565b90620003d66200008b926003620003b8565b6004620003b8565b620003ee62000122620001229290565b6001600160a01b031690565b6200012290620003de565b6200041090620003ee565b9052565b6020810192916200008b919062000405565b9190620004346000620003fa565b926200044084620003ee565b6200044b82620003ee565b146200045d576200008b929362000561565b62000483846200046c60405190565b63ec442f0560e01b81529182916004830162000414565b0390fd5b6200012290620003ee906001600160a01b031682565b620001229062000487565b62000122906200049d565b90620004bf90620004a8565b600052602052604060002090565b620001229081565b620001229054620004cd565b6040906200050c6200008b9496959396620005056060840198600085019062000405565b6020830152565b0152565b906000199062000217565b906200052f620001226200024f9262000221565b825462000510565b634e487b7160e01b600052601160045260246000fd5b919082018092116200055b57565b62000537565b8160006200056f81620003fa565b6200057a81620003ee565b6200058585620003ee565b036200066e57620005b990620005b3620005ab88620005a56002620004d5565b6200054d565b60026200051b565b620003ee565b620005c483620003ee565b036200063d575050620005e5620005ab84620005e16002620004d5565b0390565b6200063862000620620006197fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef93620004a8565b93620004a8565b936200062b60405190565b9182918290815260200190565b0390a3565b62000668916200064d91620004b3565b62000661856200065d83620004d5565b0190565b906200051b565b620005e5565b90915062000687620006818484620004b3565b620004d5565b858110620006b657849291620005b3620006a488620005b9940390565b620006b08786620004b3565b6200051b565b836200048387620006c660405190565b63391434e360e21b815293849360048501620004e156fe6080604052600436101561001257600080fd5b60003560e01c806306fdde03146100a2578063095ea7b31461009d57806318160ddd1461009857806323b872dd14610093578063313ce5671461008e57806370a082311461008957806395d89b4114610084578063a9059cbb1461007f5763dd62ed3e036100b257610312565b6102d3565b6102b8565b61029d565b61025a565b61023e565b6101e2565b6101b4565b610126565b60009103126100b257565b600080fd5b60005b8381106100ca5750506000910152565b81810151838201526020016100ba565b6100fb61010460209361010e936100ef815190565b80835293849260200190565b958691016100b7565b601f01601f191690565b0190565b6020808252610123929101906100da565b90565b346100b2576101363660046100a7565b61014d610141610463565b60405191829182610112565b0390f35b6001600160a01b031690565b6001600160a01b0381165b036100b257565b9050359061017c8261015d565b565b80610168565b9050359061017c8261017e565b91906040838203126100b257610123906101ab818561016f565b93602001610184565b346100b25761014d6101d06101ca366004610191565b90610540565b60405191829182901515815260200190565b346100b2576101f23660046100a7565b61014d6101fd6104a5565b6040515b9182918290815260200190565b90916060828403126100b257610123610227848461016f565b93610235816020860161016f565b93604001610184565b346100b25761014d6101d061025436600461020e565b9161054b565b346100b25761026a3660046100a7565b61014d61027561048a565b6040519182918260ff909116815260200190565b906020828203126100b2576101239161016f565b346100b25761014d6101fd6102b3366004610289565b6104ef565b346100b2576102c83660046100a7565b61014d61014161046d565b346100b25761014d6101d06102e9366004610191565b9061050b565b91906040838203126100b25761012390610309818561016f565b9360200161016f565b346100b25761014d6101fd6103283660046102ef565b90610520565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610364575b602083101461035f57565b61032e565b91607f1691610354565b8054600093929161038b61038183610344565b8085529360200190565b91600181169081156103dd57506001146103a457505050565b6103b79192939450600052602060002090565b916000925b8184106103c95750500190565b8054848401526020909301926001016103bc565b92949550505060ff1916825215156020020190565b906101239161036e565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761043457604052565b6103fc565b9061017c6104539261044a60405190565b938480926103f2565b0383610412565b61012390610439565b610123600361045a565b610123600461045a565b6104846101236101239290565b60ff1690565b6101236012610477565b6101239081565b6101239054610494565b610123600261049b565b610151610123610123926001600160a01b031690565b610123906104af565b610123906104c5565b906104e1906104ce565b600052602052604060002090565b610506610123916104fe600090565b5060006104d7565b61049b565b61051b919033610572565b610572565b600190565b6101239161053b61050692610533600090565b5060016104d7565b6104d7565b61051b919033610814565b61051b92919061051683338361093e565b6101516101236101239290565b6101239061055c565b92919061057f6000610569565b936001600160a01b0385166001600160a01b0382161461060b576001600160a01b0385166001600160a01b038316146105bd5761017c9394506106c9565b610607856105ca60405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6106078561061860405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6001600160a01b03909116815260608101939261017c92909160409161067c906020830152565b0152565b6101236101236101239290565b9061012361012361069d92610680565b9055565b634e487b7160e01b600052601160045260246000fd5b919082018092116106c457565b6106a1565b8160006106d581610569565b6001600160a01b0381166001600160a01b0385160361079f5761070f9061015161070888610703600261049b565b6106b7565b600261068d565b6001600160a01b0383160361077a57505061073561070884610731600261049b565b0390565b61077561076b6107657fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef936104ce565b936104ce565b9361020160405190565b0390a3565b61079a91610787916104d7565b6107948561010e8361049b565b9061068d565b610735565b9091506107af61050684846104d7565b8581106107d7578492916101516107c88861070f940390565b6107d287866104d7565b61068d565b83610607876107e560405190565b9384937fe450d38c00000000000000000000000000000000000000000000000000000000855260048501610655565b909161017c926001925b90919261082b6000610569565b6001600160a01b0381166001600160a01b038416146108f4576001600160a01b0381166001600160a01b038516146108aa5750610871846107d28561053b8660016104d7565b61087a57505050565b61077561076b6107657f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925936104ce565b610607906108b760405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6106079061090160405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b9092919261094c8183610520565b93600019850361095e575b5050509050565b808510610984576109729061097b94950390565b9060009261081e565b80388080610957565b90610607859261099360405190565b9384937ffb8f41b20000000000000000000000000000000000000000000000000000000085526004850161065556fea26469706673582212206c5fbc4c274c1d9b437e400eeb4b616e6aa1bcff9af56e0a9b15e71aada6082664736f6c63430008140033", } // ConstantSupplyERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/CrossChainMessenger/CrossChainMessenger.go b/contracts/generated/CrossChainMessenger/CrossChainMessenger.go index f9026536ea..af8f62f67e 100644 --- a/contracts/generated/CrossChainMessenger/CrossChainMessenger.go +++ b/contracts/generated/CrossChainMessenger/CrossChainMessenger.go @@ -42,7 +42,7 @@ type StructsCrossChainMessage struct { // CrossChainMessengerMetaData contains all meta data concerning the CrossChainMessenger contract. var CrossChainMessengerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"crossChainSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"encodeCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messageBusAddr\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"relayMessageWithProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610db9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80639b7cf1ee116100505780639b7cf1ee146100e0578063a1a227fa146100f3578063c4d66de81461010457600080fd5b80630671b22e146100775780635b76f28b1461008c57806363012de5146100b5575b600080fd5b61008a6100853660046107ab565b610117565b005b61009f61009a366004610867565b61021c565b6040516100ac919061093a565b60405180910390f35b6001546100c8906001600160a01b031681565b6040516001600160a01b0390911681526020016100ac565b61008a6100ee366004610954565b61029c565b6000546001600160a01b03166100c8565b61008a610112366004610991565b610392565b610123848484846104ed565b6101306020850185610991565b600180546001600160a01b0319166001600160a01b0392909216919091179055600061015f60808601866109ac565b81019061016c9190610a83565b905060008082600001516001600160a01b03165a84602001516040516101929190610b57565b60006040518083038160008787f1925050503d80600081146101d0576040519150601f19603f3d011682016040523d82523d6000602084013e6101d5565b606091505b509150915081610203578060405163a5fa8d2b60e01b81526004016101fa919061093a565b60405180910390fd5b5050600180546001600160a01b03191690555050505050565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602091820152604051610284929101610b73565b60405160208183030381529060405290509392505050565b6102a581610616565b6102b26020820182610991565b600180546001600160a01b0319166001600160a01b039290921691909117905560006102e160808301836109ac565b8101906102ee9190610a83565b905060008082600001516001600160a01b03165a84602001516040516103149190610b57565b60006040518083038160008787f1925050503d8060008114610352576040519150601f19603f3d011682016040523d82523d6000602084013e610357565b606091505b50915091508161037c578060405163a5fa8d2b60e01b81526004016101fa919061093a565b5050600180546001600160a01b03191690555050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103dd5750825b905060008267ffffffffffffffff1660011480156103fa5750303b155b905081158015610408575080155b1561043f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561047357845468ff00000000000000001916680100000000000000001785555b600080546001600160a01b0388166001600160a01b03199182161790915560018054909116905583156104e557845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6000546040517fe138a8d20000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063e138a8d29061053c908790879087908790600401610ce2565b60006040518083038186803b15801561055457600080fd5b505afa158015610568573d6000803e3d6000fd5b5050505060008460405160200161057f9190610d4e565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156105f75760405162461bcd60e51b815260206004820152601960248201527f4d65737361676520616c726561647920636f6e73756d65642e0000000000000060448201526064016101fa565b6000908152600260205260409020805460ff1916600117905550505050565b6000546040517f33a88c720000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906333a88c729061065f908490600401610d4e565b602060405180830381865afa15801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a09190610d61565b6106ec5760405162461bcd60e51b815260206004820152601f60248201527f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0060448201526064016101fa565b6000816040516020016106ff9190610d4e565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156107775760405162461bcd60e51b815260206004820152601960248201527f4d65737361676520616c726561647920636f6e73756d65642e0000000000000060448201526064016101fa565b6000908152600260205260409020805460ff1916600117905550565b600060c082840312156107a557600080fd5b50919050565b600080600080606085870312156107c157600080fd5b843567ffffffffffffffff808211156107d957600080fd5b6107e588838901610793565b955060208701359150808211156107fb57600080fd5b818701915087601f83011261080f57600080fd5b81358181111561081e57600080fd5b8860208260051b850101111561083357600080fd5b95986020929092019750949560400135945092505050565b80356001600160a01b038116811461086257600080fd5b919050565b60008060006040848603121561087c57600080fd5b6108858461084b565b9250602084013567ffffffffffffffff808211156108a257600080fd5b818601915086601f8301126108b657600080fd5b8135818111156108c557600080fd5b8760208285010111156108d757600080fd5b6020830194508093505050509250925092565b60005b838110156109055781810151838201526020016108ed565b50506000910152565b600081518084526109268160208601602086016108ea565b601f01601f19169290920160200192915050565b60208152600061094d602083018461090e565b9392505050565b60006020828403121561096657600080fd5b813567ffffffffffffffff81111561097d57600080fd5b61098984828501610793565b949350505050565b6000602082840312156109a357600080fd5b61094d8261084b565b6000808335601e198436030181126109c357600080fd5b83018035915067ffffffffffffffff8211156109de57600080fd5b6020019150368190038213156109f357600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610a4c57610a4c6109fa565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610a7b57610a7b6109fa565b604052919050565b60006020808385031215610a9657600080fd5b823567ffffffffffffffff80821115610aae57600080fd5b9084019060608287031215610ac257600080fd5b610aca610a29565b610ad38361084b565b81528383013582811115610ae657600080fd5b8301601f81018813610af757600080fd5b803583811115610b0957610b096109fa565b610b1b601f8201601f19168701610a52565b93508084528886828401011115610b3157600080fd5b808683018786013760009084018601525092830152604090810135908201529392505050565b60008251610b698184602087016108ea565b9190910192915050565b602081526001600160a01b0382511660208201526000602083015160606040840152610ba2608084018261090e565b9050604084015160608401528091505092915050565b803563ffffffff8116811461086257600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b803560ff8116811461086257600080fd5b6001600160a01b03610c178261084b565b1682526000602082013567ffffffffffffffff808216808314610c3957600080fd5b6020860152610c4a60408501610bb8565b915063ffffffff808316604087015280610c6660608701610bb8565b1660608701525060808401359150601e19843603018212610c8657600080fd5b6020918401918201913581811115610c9d57600080fd5b803603831315610cac57600080fd5b60c06080870152610cc160c087018285610bcc565b92505050610cd160a08401610bf5565b60ff811660a0860152509392505050565b606081526000610cf56060830187610c06565b82810360208401528481527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851115610d2d57600080fd5b8460051b808760208401376040939093019390935250016020019392505050565b60208152600061094d6020830184610c06565b600060208284031215610d7357600080fd5b8151801515811461094d57600080fdfea2646970667358221220bfa77a9cb7a9b7927e0c62d2b46c43cd4c752d413eaf17cc3755e9b3831915e564736f6c63430008140033", + Bin: "0x60806040523461001a57604051610ebe6100208239610ebe90f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630671b22e146100725780635b76f28b1461006d57806363012de5146100685780639b7cf1ee14610063578063a1a227fa1461005e5763c4d66de80361008557610353565b610324565b61030c565b6102b1565b61024f565b61012c565b908160c09103126100855790565b600080fd5b909182601f830112156100855781359167ffffffffffffffff831161008557602001926020830284011161008557565b805b0361008557565b905035906100d0826100ba565b565b9060608282031261008557813567ffffffffffffffff811161008557816100fa918401610077565b92602083013567ffffffffffffffff81116100855761011e8361012992860161008a565b9390946040016100c3565b90565b346100855761014861013f3660046100d2565b92919091610d6f565b604051005b0390f35b6001600160a01b031690565b6001600160a01b0381166100bc565b905035906100d08261015d565b909182601f830112156100855781359167ffffffffffffffff831161008557602001926001830284011161008557565b919091604081840312610085576101c0838261016c565b92602082013567ffffffffffffffff8111610085576101df9201610179565b9091565b60005b8381106101f65750506000910152565b81810151838201526020016101e6565b61022761023060209361023a9361021b815190565b80835293849260200190565b958691016101e3565b601f01601f191690565b0190565b602080825261012992910190610206565b346100855761014d61026b6102653660046101a9565b91610793565b6040519182918261023e565b600091031261008557565b610129916008021c6001600160a01b031690565b906101299154610282565b61012960006001610296565b9052565b34610085576102c1366004610277565b61014d6102cc6102a1565b604051918291826001600160a01b03909116815260200190565b9060208282031261008557813567ffffffffffffffff8111610085576101299201610077565b346100855761014861031f3660046102e6565b61091c565b3461008557610334366004610277565b61014d6102cc610663565b90602082820312610085576101299161016c565b346100855761014861036636600461033f565b610647565b6101299060401c5b60ff1690565b610129905461036b565b610129905b67ffffffffffffffff1690565b6101299054610383565b6103886101296101299290565b610151610129610129926001600160a01b031690565b610129906103ac565b610129906103c2565b6101296101296101299290565b9067ffffffffffffffff905b9181191691161790565b6103886101296101299267ffffffffffffffff1690565b9061041e610129610425926103f7565b82546103e1565b9055565b9068ff00000000000000009060401b6103ed565b9061044d61012961042592151590565b8254610429565b6102ad9061039f565b6020810192916100d09190610454565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081906104aa6104a46104a084610379565b1590565b93610395565b926000916104b78361039f565b67ffffffffffffffff861614806105dd575b6001956104e66104d88861039f565b9167ffffffffffffffff1690565b1490816105b5575b155b90816105ac575b5061057d5761052090826105178561050e8961039f565b9701968761040e565b61056e57610620565b61052957505050565b6105329161043d565b6105697fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29161056060405190565b9182918261045d565b0390a1565b610578868661043d565b610620565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b159050386104f7565b90506104f06105c3306103cb565b3b6105d46105d0876103d4565b9190565b149190506104ee565b50816104c9565b906001600160a01b03906103ed565b90610603610129610425926103cb565b82546105e4565b6101516101296101299290565b6101299061060a565b61062c610633916103cb565b60006105f3565b6100d06106406000610617565b60016105f3565b6100d09061046d565b61012990610151565b6101299054610650565b6101296106706000610659565b6103cb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff8211176106c657604052565b610675565b906100d06106d860405190565b92836106a4565b61012960606106cb565b67ffffffffffffffff81116106c657602090601f01601f19160190565b90826000939282370152565b90929192610727610722826106e9565b6106cb565b93818552602085019082840111610085576100d092610706565b610129913691610712565b80516001600160a01b03168252906101299060408061077a6060840160208701518582036020870152610206565b940151910152565b60208082526101299291019061074c565b916107e2916107d66107cf6107db936107aa606090565b506000936107ca6107b96106df565b6001600160a01b03909916868a0152565b610741565b6020860152565b6103d4565b6040830152565b6101296107ee60405190565b80926107fe602083019182610782565b908103825203826106a4565b356101298161015d565b903590601e193682900301821215610085570180359067ffffffffffffffff8211610085576020019136829003831361008557565b9080601f830112156100855781602061012993359101610712565b9190916060818403126100855761087b60606106cb565b926000610888828461016c565b9085015260208201359067ffffffffffffffff8211610085576108b0816108bf938501610849565b602086015260408093016100c3565b90830152565b9060208282031261008557813567ffffffffffffffff8111610085576101299201610864565b906108f8610722836106e9565b918252565b3d156109175761090c3d6108eb565b903d6000602084013e565b606090565b600061094f610947829361092f81610c68565b61093d61064085830161080a565b6080810190610814565b8101906108c5565b808201516001600160a01b03168260205a9301519160208301925193f161097c6109776108fd565b911590565b61098e57506100d06106406000610617565b6105a89061099b60405190565b9182917fa5fa8d2b0000000000000000000000000000000000000000000000000000000083526004830161023e565b8015156100bc565b905051906100d0826109ca565b9060208282031261008557610129916109d2565b5061012990602081019061016c565b67ffffffffffffffff81166100bc565b905035906100d082610a02565b50610129906020810190610a12565b63ffffffff81166100bc565b905035906100d082610a2e565b50610129906020810190610a3a565b9035601e19368390030181121561008557016020813591019167ffffffffffffffff82116100855736829003831361008557565b919061023081610aa18161023a9560209181520190565b8095610706565b60ff81166100bc565b905035906100d082610aa8565b50610129906020810190610ab1565b906101299060a0610b78610b6e60c08401610af8610aeb88806109f3565b6001600160a01b03168652565b610b19610b086020890189610a1f565b67ffffffffffffffff166020870152565b610b36610b296040890189610a47565b63ffffffff166040870152565b610b53610b466060890189610a47565b63ffffffff166060870152565b610b606080880188610a56565b908683036080880152610a8a565b9482810190610abe565b60ff16910152565b602080825261012992910190610acd565b6040513d6000823e3d90fd5b15610ba457565b60405162461bcd60e51b815260206004820152601f60248201527f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e006044820152606490fd5b61012990610373565b6101299054610be9565b15610c0357565b60405162461bcd60e51b815260206004820152601960248201527f4d65737361676520616c726561647920636f6e73756d65642e000000000000006044820152606490fd5b9060ff906103ed565b90610c6161012961042592151590565b8254610c48565b610c99906020610c816106706106706106706000610659565b6333a88c7290610c9060405190565b94859260e01b90565b82528180610caa8660048301610b80565b03915afa918215610d6a576100d092610ccb91600091610d3c575b50610b9d565b610ce7610cd760405190565b80926107fe602083019182610b80565b610cf9610cf2825190565b9160200190565b20610d37600291610d25610d1f610d1a838690600052602052604060002090565b610bf2565b15610bfc565b60019290600052602052604060002090565b610c51565b610d5d915060203d8111610d63575b610d5581836106a4565b8101906109df565b38610cc5565b503d610d4b565b610b91565b6109479061092f600095869561094f9584610e00565b9037565b8183529091602001917f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610085578291602061023a9202938491610d85565b949391610dfb906100d094610ded60409460608a01908a820360008c0152610acd565b9188830360208a0152610d89565b940152565b919290610e106106706000610659565b63e138a8d292813b1561008557600093610e49610e3d92610e3060405190565b9889968795869560e01b90565b85528960048601610dca565b03915afa918215610d6a576100d092610e6a575b50610ce7610cd760405190565b610e82906000610e7a81836106a4565b810190610277565b38610e5d56fea2646970667358221220b27baaacdc39ed39faed52c288adf1bc50f7caaff3a867818c79b836de0436a664736f6c63430008140033", } // CrossChainMessengerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ECDSA/ECDSA.go b/contracts/generated/ECDSA/ECDSA.go index 7951070e66..902e50c170 100644 --- a/contracts/generated/ECDSA/ECDSA.go +++ b/contracts/generated/ECDSA/ECDSA.go @@ -32,7 +32,7 @@ var ( // ECDSAMetaData contains all meta data concerning the ECDSA contract. var ECDSAMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201dcfa8de1a91951bbee126e9a19cf666d995aa22e57c5d7fd381e1e681d9157064736f6c63430008140033", + Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea26469706673582212201c5c53aabc0b3c531c2c849b15f6469610b0a5a84593a55b133749726edf62a364736f6c63430008140033", } // ECDSAABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ERC1967Proxy/ERC1967Proxy.go b/contracts/generated/ERC1967Proxy/ERC1967Proxy.go new file mode 100644 index 0000000000..91bad8e577 --- /dev/null +++ b/contracts/generated/ERC1967Proxy/ERC1967Proxy.go @@ -0,0 +1,368 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ERC1967Proxy + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ERC1967ProxyMetaData contains all meta data concerning the ERC1967Proxy contract. +var ERC1967ProxyMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}]", + Bin: "0x608060405261001561000f610167565b90610189565b60405160d0610406823960d090f35b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761005b57604052565b610024565b9061007461006d60405190565b928361003a565b565b6001600160a01b031690565b90565b6001600160a01b0381160361009657565b600080fd5b9050519061007482610085565b6001600160401b03811161005b57602090601f01601f19160190565b60005b8381106100d75750506000910152565b81810151838201526020016100c7565b909291926100fc6100f7826100a8565b610060565b9381855260208501908284011161009657610074926100c4565b9080601f83011215610096578151610082926020016100e7565b91909160408184031261009657610147838261009b565b60208201519093906001600160401b038111610096576100829201610116565b6101856104d68038038061017a81610060565b928339810190610130565b9091565b90610074916101c6565b61008290610076906001600160a01b031682565b61008290610193565b610082906101a7565b6100826100826100829290565b906101d0826102a3565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b6101fa836101b0565b9061020460405190565b600090a2805161021b61021760006101b9565b9190565b111561022d5761022a9161034d565b50565b50506100746102f5565b6001600160a01b03909116815260200190565b6100827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101b9565b9061028361008261029f926101b0565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6000813b6102b3610217836101b9565b146102ce5790610074916102c861008261024a565b01610273565b6102f1826102db60405190565b634c9c8ce360e01b815291829160048301610237565b0390fd5b3461030361021760006101b9565b1161030a57565b60405163b398979f60e01b8152600490fd5b906103296100f7836100a8565b918252565b3d156103485761033d3d61031c565b903d6000602084013e565b606090565b6000806100829361035c606090565b50805190602001845af461036e61032e565b919061037a57506103d6565b815160009061038b610217836101b9565b1490816103bf575b5061039c575090565b6102f1906103a960405190565b639996b31560e01b815291829160048301610237565b90506103cf610217833b926101b9565b1438610393565b80516103e561021760006101b9565b11156103f357805190602001fd5b604051630a12f52160e11b8152600490fdfe6080604052600a600e565b607a565b60146069565b90565b6014601460149290565b60147f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6017565b73ffffffffffffffffffffffffffffffffffffffff1690565b601490546048565b60146000607560146021565b016061565b60008091368280378136915af43d6000803e156095573d6000f35b3d6000fdfea2646970667358221220c2cde57a9a3a066b13561220e5106c90f155f1d8c0b18286351d4db3fa15dd4d64736f6c63430008140033", +} + +// ERC1967ProxyABI is the input ABI used to generate the binding from. +// Deprecated: Use ERC1967ProxyMetaData.ABI instead. +var ERC1967ProxyABI = ERC1967ProxyMetaData.ABI + +// ERC1967ProxyBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ERC1967ProxyMetaData.Bin instead. +var ERC1967ProxyBin = ERC1967ProxyMetaData.Bin + +// DeployERC1967Proxy deploys a new Ethereum contract, binding an instance of ERC1967Proxy to it. +func DeployERC1967Proxy(auth *bind.TransactOpts, backend bind.ContractBackend, implementation common.Address, _data []byte) (common.Address, *types.Transaction, *ERC1967Proxy, error) { + parsed, err := ERC1967ProxyMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC1967ProxyBin), backend, implementation, _data) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ERC1967Proxy{ERC1967ProxyCaller: ERC1967ProxyCaller{contract: contract}, ERC1967ProxyTransactor: ERC1967ProxyTransactor{contract: contract}, ERC1967ProxyFilterer: ERC1967ProxyFilterer{contract: contract}}, nil +} + +// ERC1967Proxy is an auto generated Go binding around an Ethereum contract. +type ERC1967Proxy struct { + ERC1967ProxyCaller // Read-only binding to the contract + ERC1967ProxyTransactor // Write-only binding to the contract + ERC1967ProxyFilterer // Log filterer for contract events +} + +// ERC1967ProxyCaller is an auto generated read-only Go binding around an Ethereum contract. +type ERC1967ProxyCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC1967ProxyTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ERC1967ProxyTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC1967ProxyFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ERC1967ProxyFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC1967ProxySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ERC1967ProxySession struct { + Contract *ERC1967Proxy // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC1967ProxyCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ERC1967ProxyCallerSession struct { + Contract *ERC1967ProxyCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ERC1967ProxyTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ERC1967ProxyTransactorSession struct { + Contract *ERC1967ProxyTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC1967ProxyRaw is an auto generated low-level Go binding around an Ethereum contract. +type ERC1967ProxyRaw struct { + Contract *ERC1967Proxy // Generic contract binding to access the raw methods on +} + +// ERC1967ProxyCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ERC1967ProxyCallerRaw struct { + Contract *ERC1967ProxyCaller // Generic read-only contract binding to access the raw methods on +} + +// ERC1967ProxyTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ERC1967ProxyTransactorRaw struct { + Contract *ERC1967ProxyTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewERC1967Proxy creates a new instance of ERC1967Proxy, bound to a specific deployed contract. +func NewERC1967Proxy(address common.Address, backend bind.ContractBackend) (*ERC1967Proxy, error) { + contract, err := bindERC1967Proxy(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ERC1967Proxy{ERC1967ProxyCaller: ERC1967ProxyCaller{contract: contract}, ERC1967ProxyTransactor: ERC1967ProxyTransactor{contract: contract}, ERC1967ProxyFilterer: ERC1967ProxyFilterer{contract: contract}}, nil +} + +// NewERC1967ProxyCaller creates a new read-only instance of ERC1967Proxy, bound to a specific deployed contract. +func NewERC1967ProxyCaller(address common.Address, caller bind.ContractCaller) (*ERC1967ProxyCaller, error) { + contract, err := bindERC1967Proxy(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ERC1967ProxyCaller{contract: contract}, nil +} + +// NewERC1967ProxyTransactor creates a new write-only instance of ERC1967Proxy, bound to a specific deployed contract. +func NewERC1967ProxyTransactor(address common.Address, transactor bind.ContractTransactor) (*ERC1967ProxyTransactor, error) { + contract, err := bindERC1967Proxy(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ERC1967ProxyTransactor{contract: contract}, nil +} + +// NewERC1967ProxyFilterer creates a new log filterer instance of ERC1967Proxy, bound to a specific deployed contract. +func NewERC1967ProxyFilterer(address common.Address, filterer bind.ContractFilterer) (*ERC1967ProxyFilterer, error) { + contract, err := bindERC1967Proxy(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ERC1967ProxyFilterer{contract: contract}, nil +} + +// bindERC1967Proxy binds a generic wrapper to an already deployed contract. +func bindERC1967Proxy(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ERC1967ProxyMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC1967Proxy *ERC1967ProxyRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC1967Proxy.Contract.ERC1967ProxyCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC1967Proxy *ERC1967ProxyRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC1967Proxy.Contract.ERC1967ProxyTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC1967Proxy *ERC1967ProxyRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC1967Proxy.Contract.ERC1967ProxyTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC1967Proxy *ERC1967ProxyCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC1967Proxy.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC1967Proxy *ERC1967ProxyTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC1967Proxy.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC1967Proxy *ERC1967ProxyTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC1967Proxy.Contract.contract.Transact(opts, method, params...) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_ERC1967Proxy *ERC1967ProxyTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _ERC1967Proxy.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_ERC1967Proxy *ERC1967ProxySession) Fallback(calldata []byte) (*types.Transaction, error) { + return _ERC1967Proxy.Contract.Fallback(&_ERC1967Proxy.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_ERC1967Proxy *ERC1967ProxyTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _ERC1967Proxy.Contract.Fallback(&_ERC1967Proxy.TransactOpts, calldata) +} + +// ERC1967ProxyUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the ERC1967Proxy contract. +type ERC1967ProxyUpgradedIterator struct { + Event *ERC1967ProxyUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC1967ProxyUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC1967ProxyUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC1967ProxyUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC1967ProxyUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC1967ProxyUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC1967ProxyUpgraded represents a Upgraded event raised by the ERC1967Proxy contract. +type ERC1967ProxyUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC1967Proxy *ERC1967ProxyFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ERC1967ProxyUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC1967Proxy.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ERC1967ProxyUpgradedIterator{contract: _ERC1967Proxy.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC1967Proxy *ERC1967ProxyFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ERC1967ProxyUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC1967Proxy.contract.WatchLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC1967ProxyUpgraded) + if err := _ERC1967Proxy.contract.UnpackLog(event, "Upgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC1967Proxy *ERC1967ProxyFilterer) ParseUpgraded(log types.Log) (*ERC1967ProxyUpgraded, error) { + event := new(ERC1967ProxyUpgraded) + if err := _ERC1967Proxy.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/generated/ERC1967Utils/ERC1967Utils.go b/contracts/generated/ERC1967Utils/ERC1967Utils.go new file mode 100644 index 0000000000..32390a4e07 --- /dev/null +++ b/contracts/generated/ERC1967Utils/ERC1967Utils.go @@ -0,0 +1,626 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ERC1967Utils + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ERC1967UtilsMetaData contains all meta data concerning the ERC1967Utils contract. +var ERC1967UtilsMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidBeacon\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}]", + Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea26469706673582212204f0f2ed754b8548335d3329d88b8cd1f89e3dd15901ed043ffcd20dd8234015164736f6c63430008140033", +} + +// ERC1967UtilsABI is the input ABI used to generate the binding from. +// Deprecated: Use ERC1967UtilsMetaData.ABI instead. +var ERC1967UtilsABI = ERC1967UtilsMetaData.ABI + +// ERC1967UtilsBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ERC1967UtilsMetaData.Bin instead. +var ERC1967UtilsBin = ERC1967UtilsMetaData.Bin + +// DeployERC1967Utils deploys a new Ethereum contract, binding an instance of ERC1967Utils to it. +func DeployERC1967Utils(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ERC1967Utils, error) { + parsed, err := ERC1967UtilsMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC1967UtilsBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ERC1967Utils{ERC1967UtilsCaller: ERC1967UtilsCaller{contract: contract}, ERC1967UtilsTransactor: ERC1967UtilsTransactor{contract: contract}, ERC1967UtilsFilterer: ERC1967UtilsFilterer{contract: contract}}, nil +} + +// ERC1967Utils is an auto generated Go binding around an Ethereum contract. +type ERC1967Utils struct { + ERC1967UtilsCaller // Read-only binding to the contract + ERC1967UtilsTransactor // Write-only binding to the contract + ERC1967UtilsFilterer // Log filterer for contract events +} + +// ERC1967UtilsCaller is an auto generated read-only Go binding around an Ethereum contract. +type ERC1967UtilsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC1967UtilsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ERC1967UtilsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC1967UtilsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ERC1967UtilsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC1967UtilsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ERC1967UtilsSession struct { + Contract *ERC1967Utils // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC1967UtilsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ERC1967UtilsCallerSession struct { + Contract *ERC1967UtilsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ERC1967UtilsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ERC1967UtilsTransactorSession struct { + Contract *ERC1967UtilsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC1967UtilsRaw is an auto generated low-level Go binding around an Ethereum contract. +type ERC1967UtilsRaw struct { + Contract *ERC1967Utils // Generic contract binding to access the raw methods on +} + +// ERC1967UtilsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ERC1967UtilsCallerRaw struct { + Contract *ERC1967UtilsCaller // Generic read-only contract binding to access the raw methods on +} + +// ERC1967UtilsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ERC1967UtilsTransactorRaw struct { + Contract *ERC1967UtilsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewERC1967Utils creates a new instance of ERC1967Utils, bound to a specific deployed contract. +func NewERC1967Utils(address common.Address, backend bind.ContractBackend) (*ERC1967Utils, error) { + contract, err := bindERC1967Utils(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ERC1967Utils{ERC1967UtilsCaller: ERC1967UtilsCaller{contract: contract}, ERC1967UtilsTransactor: ERC1967UtilsTransactor{contract: contract}, ERC1967UtilsFilterer: ERC1967UtilsFilterer{contract: contract}}, nil +} + +// NewERC1967UtilsCaller creates a new read-only instance of ERC1967Utils, bound to a specific deployed contract. +func NewERC1967UtilsCaller(address common.Address, caller bind.ContractCaller) (*ERC1967UtilsCaller, error) { + contract, err := bindERC1967Utils(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ERC1967UtilsCaller{contract: contract}, nil +} + +// NewERC1967UtilsTransactor creates a new write-only instance of ERC1967Utils, bound to a specific deployed contract. +func NewERC1967UtilsTransactor(address common.Address, transactor bind.ContractTransactor) (*ERC1967UtilsTransactor, error) { + contract, err := bindERC1967Utils(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ERC1967UtilsTransactor{contract: contract}, nil +} + +// NewERC1967UtilsFilterer creates a new log filterer instance of ERC1967Utils, bound to a specific deployed contract. +func NewERC1967UtilsFilterer(address common.Address, filterer bind.ContractFilterer) (*ERC1967UtilsFilterer, error) { + contract, err := bindERC1967Utils(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ERC1967UtilsFilterer{contract: contract}, nil +} + +// bindERC1967Utils binds a generic wrapper to an already deployed contract. +func bindERC1967Utils(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ERC1967UtilsMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC1967Utils *ERC1967UtilsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC1967Utils.Contract.ERC1967UtilsCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC1967Utils *ERC1967UtilsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC1967Utils.Contract.ERC1967UtilsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC1967Utils *ERC1967UtilsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC1967Utils.Contract.ERC1967UtilsTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC1967Utils *ERC1967UtilsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC1967Utils.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC1967Utils *ERC1967UtilsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC1967Utils.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC1967Utils *ERC1967UtilsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC1967Utils.Contract.contract.Transact(opts, method, params...) +} + +// ERC1967UtilsAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the ERC1967Utils contract. +type ERC1967UtilsAdminChangedIterator struct { + Event *ERC1967UtilsAdminChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC1967UtilsAdminChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC1967UtilsAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC1967UtilsAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC1967UtilsAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC1967UtilsAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC1967UtilsAdminChanged represents a AdminChanged event raised by the ERC1967Utils contract. +type ERC1967UtilsAdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_ERC1967Utils *ERC1967UtilsFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*ERC1967UtilsAdminChangedIterator, error) { + + logs, sub, err := _ERC1967Utils.contract.FilterLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return &ERC1967UtilsAdminChangedIterator{contract: _ERC1967Utils.contract, event: "AdminChanged", logs: logs, sub: sub}, nil +} + +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_ERC1967Utils *ERC1967UtilsFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *ERC1967UtilsAdminChanged) (event.Subscription, error) { + + logs, sub, err := _ERC1967Utils.contract.WatchLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC1967UtilsAdminChanged) + if err := _ERC1967Utils.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_ERC1967Utils *ERC1967UtilsFilterer) ParseAdminChanged(log types.Log) (*ERC1967UtilsAdminChanged, error) { + event := new(ERC1967UtilsAdminChanged) + if err := _ERC1967Utils.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC1967UtilsBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the ERC1967Utils contract. +type ERC1967UtilsBeaconUpgradedIterator struct { + Event *ERC1967UtilsBeaconUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC1967UtilsBeaconUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC1967UtilsBeaconUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC1967UtilsBeaconUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC1967UtilsBeaconUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC1967UtilsBeaconUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC1967UtilsBeaconUpgraded represents a BeaconUpgraded event raised by the ERC1967Utils contract. +type ERC1967UtilsBeaconUpgraded struct { + Beacon common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. +// +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_ERC1967Utils *ERC1967UtilsFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*ERC1967UtilsBeaconUpgradedIterator, error) { + + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _ERC1967Utils.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) + if err != nil { + return nil, err + } + return &ERC1967UtilsBeaconUpgradedIterator{contract: _ERC1967Utils.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil +} + +// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. +// +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_ERC1967Utils *ERC1967UtilsFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *ERC1967UtilsBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { + + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _ERC1967Utils.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC1967UtilsBeaconUpgraded) + if err := _ERC1967Utils.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. +// +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_ERC1967Utils *ERC1967UtilsFilterer) ParseBeaconUpgraded(log types.Log) (*ERC1967UtilsBeaconUpgraded, error) { + event := new(ERC1967UtilsBeaconUpgraded) + if err := _ERC1967Utils.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC1967UtilsUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the ERC1967Utils contract. +type ERC1967UtilsUpgradedIterator struct { + Event *ERC1967UtilsUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC1967UtilsUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC1967UtilsUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC1967UtilsUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC1967UtilsUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC1967UtilsUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC1967UtilsUpgraded represents a Upgraded event raised by the ERC1967Utils contract. +type ERC1967UtilsUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC1967Utils *ERC1967UtilsFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ERC1967UtilsUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC1967Utils.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ERC1967UtilsUpgradedIterator{contract: _ERC1967Utils.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC1967Utils *ERC1967UtilsFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ERC1967UtilsUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC1967Utils.contract.WatchLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC1967UtilsUpgraded) + if err := _ERC1967Utils.contract.UnpackLog(event, "Upgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC1967Utils *ERC1967UtilsFilterer) ParseUpgraded(log types.Log) (*ERC1967UtilsUpgraded, error) { + event := new(ERC1967UtilsUpgraded) + if err := _ERC1967Utils.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/generated/EthereumBridge/EthereumBridge.go b/contracts/generated/EthereumBridge/EthereumBridge.go index 4dbd062fe6..40906e980f 100644 --- a/contracts/generated/EthereumBridge/EthereumBridge.go +++ b/contracts/generated/EthereumBridge/EthereumBridge.go @@ -32,7 +32,7 @@ var ( // EthereumBridgeMetaData contains all meta data concerning the EthereumBridge contract. var EthereumBridgeMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"remoteAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreatedWrappedToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messengerAddress\",\"type\":\"address\"}],\"name\":\"configure\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"hasTokenMapping\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"remoteBridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"localToRemoteToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"crossChainAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"onCreateTokenCommand\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"receiveAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"remoteToLocalToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendNative\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"wrappedTokens\",\"outputs\":[{\"internalType\":\"contractWrappedERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040526001805463ffffffff60a01b1916905534801561002057600080fd5b50612688806100306000396000f3fe608060405260043610620000c65760003560e01c806383bece4d11620000735780639e405b7111620000555780639e405b7114620002dc578063a381c8e21462000316578063d5c6b504146200033b576200013f565b806383bece4d14620002675780639813c7b2146200028c576200013f565b8063458ffd6311620000a9578063458ffd6314620001f8578063485cc955146200021d57806375cb26721462000242576200013f565b80628d48e314620001885780631888d71214620001df576200013f565b366200013f5760405162461bcd60e51b815260206004820152602360248201527f436f6e747261637420646f6573206e6f7420737570706f72742072656365697660448201527f652829000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60405162461bcd60e51b815260206004820152601d60248201527f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000604482015260640162000136565b3480156200019557600080fd5b50620001c2620001a736600462000f86565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620001f6620001f036600462000f86565b62000375565b005b3480156200020557600080fd5b50620001f66200021736600462000ff9565b6200052e565b3480156200022a57600080fd5b50620001f66200023c36600462001085565b62000741565b3480156200024f57600080fd5b50620001f66200026136600462000f86565b620008ae565b3480156200027457600080fd5b50620001f662000286366004620010c3565b6200098e565b3480156200029957600080fd5b50620002cb620002ab36600462000f86565b6001600160a01b0390811660009081526002602052604090205416151590565b6040519015158152602001620001d6565b348015620002e957600080fd5b50620001c2620002fb36600462000f86565b6003602052600090815260409020546001600160a01b031681565b3480156200032357600080fd5b50620001f662000335366004620010c3565b62000bd1565b3480156200034857600080fd5b50620001c26200035a36600462000f86565b6002602052600090815260409020546001600160a01b031681565b60003411620003c75760405162461bcd60e51b815260206004820152600d60248201527f4e6f7468696e672073656e742e00000000000000000000000000000000000000604482015260640162000136565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff546040516001600160a01b03918216602482015234604482015290831660648201526383bece4d60e01b9060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150620004a0906001600160a01b03168260005b60008062000d60565b6001546001600160a01b03166040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152346024830181905292169163346633fb916044016000604051808303818588803b1580156200051057600080fd5b505af115801562000525573d6000803e3d6000fd5b50505050505050565b6005546000546001600160a01b0391821691163314620005b75760405162461bcd60e51b815260206004820152603060248201527f436f6e74726163742063616c6c6572206973206e6f742074686520726567697360448201527f7465726564206d657373656e6765722100000000000000000000000000000000606482015260840162000136565b806001600160a01b0316620005cb62000e75565b6001600160a01b031614620006495760405162461bcd60e51b815260206004820152603160248201527f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2060448201527f696e636f72726563742073656e64657221000000000000000000000000000000606482015260840162000136565b6000858585856040516200065d9062000f5f565b6200066c949392919062001133565b604051809103906000f08015801562000689573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca906200072f908a9084908b908b908b908b9062001169565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156200078d5750825b905060008267ffffffffffffffff166001148015620007ab5750303b155b905081158015620007ba575080155b15620007f2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156200082757845468ff00000000000000001916680100000000000000001785555b6200083287620008ae565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156200052557845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b620008b862000ef5565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa15801562000938573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200095e9190620011ba565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b039182169116331462000a175760405162461bcd60e51b815260206004820152603060248201527f436f6e74726163742063616c6c6572206973206e6f742074686520726567697360448201527f7465726564206d657373656e6765722100000000000000000000000000000000606482015260840162000136565b806001600160a01b031662000a2b62000e75565b6001600160a01b03161462000aa95760405162461bcd60e51b815260206004820152603160248201527f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2060448201527f696e636f72726563742073656e64657221000000000000000000000000000000606482015260840162000136565b6001600160a01b0380851660009081526004602090815260408083205484168084526002909252909120549091168062000b4c5760405162461bcd60e51b815260206004820152602b60248201527f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726160448201527f7070656420746f6b656e21000000000000000000000000000000000000000000606482015260840162000136565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526024820187905282169063979005ad90604401600060405180830381600087803b15801562000bb057600080fd5b505af115801562000bc5573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b038084166000908152600260205260409020541662000c3a5760405162461bcd60e51b815260206004820152601560248201527f4e6f206d617070696e6720666f7220746f6b656e2e0000000000000000000000604482015260640162000136565b6001600160a01b03838116600090815260026020526040908190205490517f1dd319cb000000000000000000000000000000000000000000000000000000008152336004820152602481018590529116908190631dd319cb90604401600060405180830381600087803b15801562000cb157600080fd5b505af115801562000cc6573d6000803e3d6000fd5b505050506001600160a01b03848116600090815260036020908152604080832054815190851660248201526044810188905286851660648083019190915282518083039091018152608490910190915290810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166383bece4d60e01b179052600554909262000d5992911690839062000497565b5050505050565b60006040518060600160405280876001600160a01b031681526020018681526020018481525060405160200162000d98919062001222565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff1690601462000ded8362001269565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b815260040162000e2f9493929190620012b4565b6020604051808303816000875af115801562000e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005259190620012f3565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000eca573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ef09190620011ba565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662000f5d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611333806200132083390190565b6001600160a01b038116811462000f8357600080fd5b50565b60006020828403121562000f9957600080fd5b813562000fa68162000f6d565b9392505050565b60008083601f84011262000fc057600080fd5b50813567ffffffffffffffff81111562000fd957600080fd5b60208301915083602082850101111562000ff257600080fd5b9250929050565b6000806000806000606086880312156200101257600080fd5b85356200101f8162000f6d565b9450602086013567ffffffffffffffff808211156200103d57600080fd5b6200104b89838a0162000fad565b909650945060408801359150808211156200106557600080fd5b50620010748882890162000fad565b969995985093965092949392505050565b600080604083850312156200109957600080fd5b8235620010a68162000f6d565b91506020830135620010b88162000f6d565b809150509250929050565b600080600060608486031215620010d957600080fd5b8335620010e68162000f6d565b9250602084013591506040840135620010ff8162000f6d565b809150509250925092565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000620011496040830186886200110a565b82810360208401526200115e8185876200110a565b979650505050505050565b60006001600160a01b03808916835280881660208401525060806040830152620011986080830186886200110a565b8281036060840152620011ad8185876200110a565b9998505050505050505050565b600060208284031215620011cd57600080fd5b815162000fa68162000f6d565b6000815180845260005b818110156200120257602081850181015186830182015201620011e4565b506000602082860101526020601f19601f83011685010191505092915050565b602081526001600160a01b0382511660208201526000602083015160606040840152620012536080840182620011da565b9050604084015160608401528091505092915050565b600063ffffffff808316818103620012aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6001019392505050565b600063ffffffff808716835280861660208401525060806040830152620012df6080830185620011da565b905060ff8316606083015295945050505050565b6000602082840312156200130657600080fd5b815167ffffffffffffffff8116811462000fa657600080fdfe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f31790553480156200003757600080fd5b5060405162001333380380620013338339810160408190526200005a9162000233565b8181818160036200006c83826200032c565b5060046200007b82826200032c565b5050505050620000b27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620000bb60201b60201c565b505050620003f8565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16620001645760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556200011b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000168565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019657600080fd5b81516001600160401b0380821115620001b357620001b36200016e565b604051601f8301601f19908116603f01168101908282118183101715620001de57620001de6200016e565b81604052838152602092508683858801011115620001fb57600080fd5b600091505b838210156200021f578582018301518183018401529082019062000200565b600093810190920192909252949350505050565b600080604083850312156200024757600080fd5b82516001600160401b03808211156200025f57600080fd5b6200026d8683870162000184565b935060208501519150808211156200028457600080fd5b50620002938582860162000184565b9150509250929050565b600181811c90821680620002b257607f821691505b602082108103620002d357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200032757600081815260208120601f850160051c81016020861015620003025750805b601f850160051c820191505b8181101562000323578281556001016200030e565b5050505b505050565b81516001600160401b038111156200034857620003486200016e565b62000360816200035984546200029d565b84620002d9565b602080601f8311600181146200039857600084156200037f5750858301515b600019600386901b1c1916600185901b17855562000323565b600085815260208120601f198616915b82811015620003c957888601518255948401946001909101908401620003a8565b5085821015620003e85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610f2b80620004086000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017e578063095ea7b31461019357806318160ddd146101a6575b600080fd5b610169610164366004610cf7565b610307565b60405190151581526020015b60405180910390f35b6101866103a0565b6040516101759190610d40565b6101696101a1366004610daa565b610432565b6002545b604051908152602001610175565b6101cb6101c6366004610daa565b61044a565b005b6101696101db366004610dd4565b6104e0565b6101aa6101ee366004610e10565b60009081526007602052604090206001015490565b6101cb610211366004610e29565b610504565b60405160128152602001610175565b6101cb610233366004610e29565b61052f565b6101aa610246366004610e55565b61057b565b6101aa7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610e29565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610186610621565b6101cb6102c1366004610daa565b610630565b6101aa600081565b6101696102dc366004610daa565b610664565b6101cb6102ef366004610e29565b610672565b6101aa610302366004610e70565b610697565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e9a565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e9a565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856107a8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610474816107b5565b8161047e8461057b565b10156104d15760405162461bcd60e51b815260206004820152601560248201527f496e73756666696369656e742062616c616e63652e000000000000000000000060448201526064015b60405180910390fd5b6104db83836107c2565b505050565b6000336104ee8582856107fc565b6104f9858585610875565b506001949350505050565b60008281526007602052604090206001015461051f816107b5565b61052983836108d4565b50505050565b6001600160a01b0381163314610571576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104db8282610982565b60006001600160a01b03821632036105ab576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105d9576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260206004820152601f60248201527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650060448201526064016104c8565b6060600480546103af90610e9a565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561065a816107b5565b6104db8383610a09565b600033610440818585610875565b60008281526007602052604090206001015461068d816107b5565b6105298383610982565b6000326001600160a01b03841614806106b85750326001600160a01b038316145b156106eb576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b038416148061070a5750336001600160a01b038316145b1561073a576001600160a01b038084166000908152600160209081526040808320938616835292905220546106e4565b60405162461bcd60e51b815260206004820152602160248201527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016104c8565b6104db8383836001610a3f565b6107bf8133610b46565b50565b6001600160a01b0382166107ec57604051634b637e8f60e11b8152600060048201526024016104c8565b6107f882600083610bb4565b5050565b60006108088484610697565b905060001981146105295781811015610866576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101829052604481018390526064016104c8565b61052984848484036000610a3f565b6001600160a01b03831661089f57604051634b637e8f60e11b8152600060048201526024016104c8565b6001600160a01b0382166108c95760405163ec442f0560e01b8152600060048201526024016104c8565b6104db838383610bb4565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff1661097a5760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556109323390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff161561097a5760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b038216610a335760405163ec442f0560e01b8152600060048201526024016104c8565b6107f860008383610bb4565b6001600160a01b038416610a82576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016104c8565b6001600160a01b038316610ac5576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016104c8565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b3891815260200190565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107f8576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016104c8565b6001600160a01b038316610bdf578060026000828254610bd49190610ed4565b90915550610c6a9050565b6001600160a01b03831660009081526020819052604090205481811015610c4b576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260248101829052604481018390526064016104c8565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610c8657600280548290039055610ca5565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cea91815260200190565b60405180910390a3505050565b600060208284031215610d0957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d3957600080fd5b9392505050565b600060208083528351808285015260005b81811015610d6d57858101830151858201604001528201610d51565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610da557600080fd5b919050565b60008060408385031215610dbd57600080fd5b610dc683610d8e565b946020939093013593505050565b600080600060608486031215610de957600080fd5b610df284610d8e565b9250610e0060208501610d8e565b9150604084013590509250925092565b600060208284031215610e2257600080fd5b5035919050565b60008060408385031215610e3c57600080fd5b82359150610e4c60208401610d8e565b90509250929050565b600060208284031215610e6757600080fd5b610d3982610d8e565b60008060408385031215610e8357600080fd5b610e8c83610d8e565b9150610e4c60208401610d8e565b600181811c90821680610eae57607f821691505b602082108103610ece57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561039a57634e487b7160e01b600052601160045260246000fdfea2646970667358221220a307e2ee117bcf3e53b622ffac095c2f1cd8a70831fd4167f3b371f2b637356664736f6c63430008140033a264697066735822122014e2c66e129c64615da0c8d508539d1a9709d33649bb7765643655cadc16896b64736f6c63430008140033", + Bin: "0x6080604052346200002657620000146200002b565b604051612d20620000938239612d2090f35b600080fd5b6200003562000084565b565b6200004a62000047620000479290565b90565b63ffffffff1690565b906200006762000047620000809262000037565b82549063ffffffff60a01b9060a01b9181191691161790565b9055565b62000035600060016200005356fe608060405260043610156200001b575b3662000f905762000fd5565b60003560e01c80628d48e314620000cd5780631888d71214620000c7578063458ffd6314620000c1578063485cc95514620000bb57806375cb267214620000b557806383bece4d14620000af5780639813c7b214620000a95780639e405b7114620000a3578063a381c8e2146200009d5763d5c6b504036200000f576200043f565b620003ef565b620003ce565b62000386565b62000368565b620002fe565b620002e0565b62000297565b620001e5565b620001a6565b6001600160a01b031690565b90565b6001600160a01b0381165b03620000f557565b600080fd5b905035906200010982620000e2565b565b90602082820312620000f557620000df91620000fa565b620000d3620000df620000df926001600160a01b031690565b620000df9062000122565b620000df906200013b565b906200015d9062000146565b600052602052604060002090565b620000df916008021c620000d3565b90620000df91546200016b565b620000df906200019c60049160009262000151565b6200017a565b9052565b34620000f557620001e1620001c7620001c13660046200010b565b62000187565b604051918291826001600160a01b03909116815260200190565b0390f35b620001fc620001f63660046200010b565b62000c00565b604051005b909182601f83011215620000f55781359167ffffffffffffffff8311620000f5576020019260018302840111620000f557565b606081830312620000f5576200024b8282620000fa565b92602082013567ffffffffffffffff8111620000f557836200026f91840162000201565b929093604082013567ffffffffffffffff8111620000f55762000293920162000201565b9091565b34620000f557620001fc620002ae36600462000234565b9392909262000a72565b9190604083820312620000f557620000df90620002d68185620000fa565b93602001620000fa565b34620000f557620001fc620002f7366004620002b8565b9062000742565b34620000f557620001fc620003153660046200010b565b62001129565b80620000ed565b9050359062000109826200031b565b9091606082840312620000f557620000df6200034e8484620000fa565b936200035e816020860162000322565b93604001620000fa565b34620000f557620001fc6200037f36600462000331565b9162000f83565b34620000f557620001e1620003a7620003a13660046200010b565b62000a9c565b60405191829182901515815260200190565b620000df906200019c60039160009262000151565b34620000f557620001e1620001c7620003e93660046200010b565b620003b9565b34620000f557620001fc6200040636600462000331565b9162000d81565b620000df906200019c60029160009262000151565b620001a29062000146565b60208101929162000109919062000422565b34620000f557620001e1620004606200045a3660046200010b565b6200040d565b604051918291826200042d565b620000df9060401c5b60ff1690565b620000df90546200046d565b620000df905b67ffffffffffffffff1690565b620000df905462000488565b6200048e620000df620000df9290565b620000df620000df620000df9290565b9067ffffffffffffffff905b9181191691161790565b6200048e620000df620000df9267ffffffffffffffff1690565b906200050b620000df6200051392620004dd565b8254620004c7565b9055565b9068ff00000000000000009060401b620004d3565b906200053f620000df6200051392151590565b825462000517565b620001a290620004a7565b60208101929162000109919062000547565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081620005a66200059f6200059b836200047c565b1590565b916200049b565b93600092620005b584620004a7565b67ffffffffffffffff87161480620006f6575b600196620005e8620005da89620004a7565b9167ffffffffffffffff1690565b149081620006c7575b155b9081620006bd575b5062000692576200062c91836200062186620006178a620004a7565b98019788620004f7565b62000680576200072a565b6200063657505050565b62000641916200052c565b6200067b7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916200067160405190565b9182918262000552565b0390a1565b6200068c87876200052c565b6200072a565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b15905038620005fb565b9050620005f3620006d83062000146565b3b620006ec620006e888620004b7565b9190565b14919050620005f1565b5082620005c8565b906001600160a01b0390620004d3565b9062000722620000df620005139262000146565b8254620006fe565b906200073a620001099262001129565b60056200070e565b90620001099162000564565b620000df90620000d3565b620000df90546200074e565b0190565b156200077157565b60405162461bcd60e51b815260206004820152603060248201527f436f6e74726163742063616c6c6572206973206e6f742074686520726567697360448201527f7465726564206d657373656e67657221000000000000000000000000000000006064820152608490fd5b15620007e457565b60405162461bcd60e51b815260206004820152603160248201527f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2060448201527f696e636f72726563742073656e646572210000000000000000000000000000006064820152608490fd5b906200010994939291620008af62000868600562000759565b6200087c620008766200119f565b62000769565b620008a86200089b6200088e620011c8565b926001600160a01b031690565b916001600160a01b031690565b14620007dc565b62000998565b634e487b7160e01b600052604160045260246000fd5b90826000939282370152565b9190620008f981620008f181620007659560209181520190565b8095620008cb565b601f01601f191690565b92906200092390620000df959360408601918683036000880152620008d7565b926020818503910152620008d7565b6040513d6000823e3d90fd5b949293620000df96946200097b62000989946200096b60808a019560008b01906001600160a01b03169052565b6001600160a01b03166020890152565b8683036040880152620008d7565b926060818503910152620008d7565b919093620009a560405190565b6117c7810181811067ffffffffffffffff82111762000a6c57620009d78387868a86956117c762001524883962000903565b03906000f093841562000a66576200067b9262000a0c620009f88762000146565b9662000a0688600262000151565b6200070e565b62000a1e8562000a0688600362000151565b62000a308662000a0687600462000151565b7f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca9662000a5c60405190565b968796876200093e565b62000932565b620008b5565b9062000109949392916200084f565b620000d3620000df620000df9290565b620000df9062000a81565b62000ac162000abb62000ac79262000ab2600090565b50600262000151565b62000759565b62000146565b62000adb6200089b620000d3600062000a91565b141590565b1562000ae857565b60405162461bcd60e51b815260206004820152600d60248201527f4e6f7468696e672073656e742e000000000000000000000000000000000000006044820152606490fd5b6001600160a01b0390911681526060810193926200010992909160409162000b56906020830152565b01906001600160a01b03169052565b90601f01601f1916810190811067ffffffffffffffff82111762000a6c57604052565b634e487b7160e01b600052602160045260246000fd5b6003111562000ba957565b62000b88565b90620001098262000b9e565b620000df9062000baf565b62000476620000df620000df9290565b6000910312620000f557565b6001600160a01b039091168152604081019291620001099160200152565b3460009162000c1b62000c1384620004b7565b831162000ae0565b62000ca9600462000c736383bece4d60e01b62000c63858762000c4f62000abb600362000c488d62000a91565b9062000151565b604051968795602087019081520162000b2d565b6020820181038252038262000b65565b62000c7f600562000759565b9062000c8b8662000bbb565b62000c9687620004b7565b9162000ca28862000bc6565b936200141a565b62000cb762000ac1620011bc565b9063346633fb91803b15620000f55762000ce884869462000cf462000cdb60405190565b9788968795869460e01b90565b84526004840162000be2565b03925af1801562000a665762000d08575050565b816200010992903d1062000d2c575b62000d23818362000b65565b81019062000bd6565b503d62000d17565b1562000d3c57565b60405162461bcd60e51b815260206004820152601560248201527f4e6f206d617070696e6720666f7220746f6b656e2e00000000000000000000006044820152606490fd5b62000d9662000d908262000a9c565b62000d34565b62000dab62000ac162000abb83600262000151565b90631dd319cb33833b15620000f557849362000ce86000809462000ddf62000dd260405190565b9889968795869460e01b90565b03925af1801562000a6657620001099460049462000e1c9462000c639362000e4e575b5062000c4f62000abb6383bece4d60e01b95600362000151565b62000e28600562000759565b9060009062000e378262000bbb565b9062000ca262000e4784620004b7565b9362000bc6565b62000e6190600062000d23818362000b65565b3862000e02565b9062000109929162000e7f62000868600562000759565b62000ef8565b1562000e8d57565b60405162461bcd60e51b815260206004820152602b60248201527f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726160448201527f7070656420746f6b656e210000000000000000000000000000000000000000006064820152608490fd5b919062000f2062000ac162000abb62000f1862000abb6004978862000151565b600262000151565b9260009362000f4962000f37620000d38762000a91565b6001600160a01b038316141562000e85565b63979005ad813b15620000f5578562000f799162000cf4829662000f6c60405190565b9889978896879560e01b90565b8552840162000be2565b9062000109929162000e68565b60405162461bcd60e51b815260206004820152601d60248201527f66616c6c6261636b2829206d6574686f6420756e737570706f727465640000006044820152606490fd5b60405162461bcd60e51b815260206004820152602360248201527f436f6e747261637420646f6573206e6f7420737570706f72742072656365697660448201527f65282900000000000000000000000000000000000000000000000000000000006064820152608490fd5b62000109906200104f62001134565b6200107b565b905051906200010982620000e2565b90602082820312620000f557620000df9162001055565b6200108a620010929162000146565b60006200070e565b620010c16020620010a862000ac1600062000759565b63a1a227fa90620010b860405190565b93849260e01b90565b825260049082905afa90811562000a66576200010991620010ec91600091620010f4575b5062000146565b60016200070e565b6200111a915060203d811162001121575b62001111818362000b65565b81019062001064565b38620010e5565b503d62001105565b620001099062001040565b620011426200059b62001174565b6200114957565b6040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152600490fd5b620000df7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006200047c565b33620011b86200089b620000d362000ac1600062000759565b1490565b620000df600162000759565b620011ee6020620011de62000ac1600062000759565b6363012de590620010b860405190565b825260049082905afa90811562000a66576000916200120b575090565b620000df915060203d8111620011215762001111818362000b65565b90620001096200123660405190565b928362000b65565b620000df606062001227565b60005b8381106200125e5750506000910152565b81810151838201526020016200124d565b62001294620008f9602093620007659362001288815190565b80835293849260200190565b958691016200124a565b80516001600160a01b0316825290620000df90604080620012cf60608401602087015185820360208701526200126f565b940151910152565b6020808252620000df929101906200129e565b620000df9060a01c5b63ffffffff1690565b620000df9054620012ea565b634e487b7160e01b600052601160045260246000fd5b63ffffffff1663ffffffff8114620013365760010190565b62001308565b9077ffffffff00000000000000000000000000000000000000009060a01b620004d3565b620012f3620000df620000df9263ffffffff1690565b906200138a620000df620005139262001360565b82546200133c565b67ffffffffffffffff8116620000ed565b90505190620001098262001392565b90602082820312620000f557620000df91620013a3565b9493916060916200010994620014026200141093620013f560808b019460008c019063ffffffff169052565b63ffffffff1660208a0152565b87820360408901526200126f565b94019060ff169052565b9193906020936200144c620014539262001446620014376200123e565b6001600160a01b039097168752565b86860152565b6040840152565b6200147f6200146160405190565b8093620014728683019182620012d7565b9081038252038362000b65565b620014d460006200149562000ac1600162000759565b92620014e063b1454caa91620014ac6001620012fc565b96620014c4620014bc896200131e565b600162001376565b604051998a988997889660e01b90565b865260048601620013c9565b03925af1801562000a6657620014f35750565b620015189060203d81116200151b575b6200150f818362000b65565b810190620013b2565b50565b503d6200150356fe60806040523462000031576200001f6200001862000175565b906200019c565b60405161123262000595823961123290f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160401b0381116200006e57602090601f01601f19160190565b60005b838110620000be5750506000910152565b8181015183820152602001620000ad565b90929192620000e8620000e2826200008d565b62000074565b9381855260208501908284011162000031576200008b92620000aa565b9080601f83011215620000315781516200012292602001620000cf565b90565b919091604081840312620000315780516001600160401b0381116200003157836200015291830162000105565b60208201519093906001600160401b038111620000315762000122920162000105565b62000198620017c7803803806200018c8162000074565b92833981019062000125565b9091565b90620001a891620001d7565b620001d4337fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775620004d5565b50565b6200008b9182918291829162000255565b906001600160a01b03905b9181191691161790565b620001229062000213906001600160a01b031682565b6001600160a01b031690565b6200012290620001fd565b62000122906200021f565b90620002496200012262000251926200022a565b8254620001e8565b9055565b9062000261916200047a565b6200008b73deb34a740eca1ec42c8b8204cbec0ba34fdd27f3600562000235565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620002bb575b6020831014620002b557565b62000282565b91607f1691620002a9565b9160001960089290920291821b911b620001f3565b6200012262000122620001229290565b919062000300620001226200025193620002db565b908354620002c6565b6200008b91600091620002eb565b81811062000323575050565b8062000333600060019362000309565b0162000317565b9190601f81116200034a57505050565b6200035e6200008b93600052602060002090565b906020601f84018190048301931062000382575b6020601f90910104019062000317565b909150819062000372565b9062000397815190565b906001600160401b0382116200006e57620003bf82620003b8855462000298565b856200033a565b602090601f8311600114620003fe5762000251929160009183620003f2575b5050600019600883021c1916906002021790565b015190503880620003de565b601f198316916200041485600052602060002090565b9260005b81811062000455575091600293918560019694106200043b575b50505002019055565b01516000196008601f8516021c1916905538808062000432565b9193602060018192878701518155019501920162000418565b906200008b916200038d565b906200048c6200008b9260036200046e565b60046200046e565b905b600052602052604060002090565b9062000496906200022a565b9060ff90620001f3565b90620004cd620001226200025192151590565b8254620004b0565b620004e9620004e583836200056b565b1590565b1562000564576001916200051883620005128360006200050b87600762000494565b01620004a4565b620004ba565b3390620005526200054b6200054b7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b926200022a565b926200055d60405190565b600090a490565b5050600090565b620001229160006200050b6200058d9362000584600090565b50600762000494565b5460ff169056fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461014257806306fdde031461013d578063095ea7b31461013857806318160ddd146101335780631dd319cb1461012e57806323b872dd14610129578063248a9ca3146101245780632f2ff15d1461011f578063313ce5671461011a57806336568abe1461011557806370a082311461011057806375b238fc1461010b57806391d148541461010657806395d89b4114610101578063979005ad146100fc578063a217fddf146100f7578063a9059cbb146100f2578063d547741f146100ed5763dd62ed3e0361017257610570565b61053d565b610521565b610506565b6104ce565b6104b3565b610497565b61045e565b610443565b610416565b6103e7565b6103ce565b610390565b610360565b610312565b6102e6565b6102ca565b610245565b61019d565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361017257565b600080fd5b9050359061018482610147565b565b906020828203126101725761019a91610177565b90565b34610172576101ca6101b86101b3366004610186565b61058c565b60405191829182901515815260200190565b0390f35b600091031261017257565b60005b8381106101ec5750506000910152565b81810151838201526020016101dc565b61021d61022660209361023093610211815190565b80835293849260200190565b958691016101d9565b601f01601f191690565b0190565b602080825261019a929101906101fc565b34610172576102553660046101ce565b6101ca610260610a37565b60405191829182610234565b6001600160a01b031690565b6001600160a01b03811661016b565b9050359061018482610278565b8061016b565b9050359061018482610294565b91906040838203126101725761019a906102c18185610287565b9360200161029a565b34610172576101ca6101b86102e03660046102a7565b90610a81565b34610172576102f63660046101ce565b6101ca610301610a62565b6040515b9182918290815260200190565b346101725761032b6103253660046102a7565b906111b4565b604051005b90916060828403126101725761019a6103498484610287565b936103578160208601610287565b9360400161029a565b34610172576101ca6101b8610376366004610330565b91610a8c565b906020828203126101725761019a9161029a565b34610172576101ca6103016103a636600461037c565b6106b8565b91906040838203126101725761019a906103c5818561029a565b93602001610287565b346101725761032b6103e13660046103ab565b906106f2565b34610172576103f73660046101ce565b6101ca610402610a58565b6040519182918260ff909116815260200190565b346101725761032b6104293660046103ab565b906107a6565b906020828203126101725761019a91610287565b34610172576101ca61030161045936600461042f565b610f05565b346101725761046e3660046101ce565b6101ca7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610301565b34610172576101ca6101b86104ad3660046103ab565b9061067f565b34610172576104c33660046101ce565b6101ca610260610a41565b346101725761032b6104e13660046102a7565b906110d0565b61019a61019a61019a9290565b61019a60006104e7565b61019a6104f4565b34610172576105163660046101ce565b6101ca6103016104fe565b34610172576101ca6101b86105373660046102a7565b90610a6c565b346101725761032b6105503660046103ab565b9061079c565b91906040838203126101725761019a906103c58185610287565b34610172576101ca610301610586366004610556565b90610f9e565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216149081156105dc575090565b61019a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b61026c61019a61019a926001600160a01b031690565b61019a90610638565b61019a9061064e565b9061062a90610657565b61019a905b60ff1690565b61019a905461066a565b61019a91600061069c6106a293610694600090565b506007610628565b01610660565b610675565b61019a9081565b61019a90546106a7565b60016106c961019a92610694600090565b016106ae565b90610184916106e56106e0826106b8565b6106fc565b906106ef9161081d565b50565b90610184916106cf565b610184903390610728565b6001600160a01b0390911681526040810192916101849160200152565b0152565b9061073a610736828461067f565b1590565b610742575050565b61077d61074e60405190565b9283927fe2517d3f00000000000000000000000000000000000000000000000000000000845260048401610707565b0390fd5b90610184916107926106e0826106b8565b906106ef9161089a565b9061018491610781565b906107b03361026c565b6001600160a01b038216036107c8576106ef9161089a565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061081261019a61081992151590565b82546107f3565b9055565b61082a610736838361067f565b156108935760019161084c8361084783600061069c876007610628565b610802565b339061088261087c61087c7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b92610657565b9261088c60405190565b600090a490565b5050600090565b906108a5818361067f565b15610893576108bf6000610847838261069c876007610628565b33906108ef61087c61087c7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b926108f960405190565b600090a4600190565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610938575b602083101461093357565b610902565b91607f1691610928565b8054600093929161095f61095583610918565b8085529360200190565b91600181169081156109b1575060011461097857505050565b61098b9192939450600052602060002090565b916000925b81841061099d5750500190565b805484840152602090930192600101610990565b92949550505060ff1916825215156020020190565b9061019a91610942565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff821117610a0857604052565b6109d0565b90610184610a2792610a1e60405190565b938480926109c6565b03836109e6565b61019a90610a0d565b61019a6003610a2e565b61019a6004610a2e565b61066f61019a61019a9290565b61019a6012610a4b565b61019a60026106ae565b610a7c919033610ab3565b610ab3565b600190565b610a7c919033610d52565b610a7c929190610a77833383610e81565b61026c61019a61019a9290565b61019a90610a9d565b929190610ac06000610aaa565b936001600160a01b0385166001600160a01b03821614610b48576001600160a01b0385166001600160a01b03831614610afe57610184939450610c02565b61077d85610b0b60405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61077d85610b5560405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6001600160a01b039091168152606081019392610184929091604091610724906020830152565b90600019906107f8565b90610bd361019a610819926104e7565b8254610bb9565b634e487b7160e01b600052601160045260246000fd5b91908201809211610bfd57565b610bda565b816000610c0e81610aaa565b6001600160a01b0381166001600160a01b03851603610cd857610c489061026c610c4188610c3c60026106ae565b610bf0565b6002610bc3565b6001600160a01b03831603610cb3575050610c6e610c4184610c6a60026106ae565b0390565b610cae610ca4610c9e7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef93610657565b93610657565b9361030560405190565b0390a3565b610cd391610cc091610660565b610ccd85610230836106ae565b90610bc3565b610c6e565b909150610ced610ce88484610660565b6106ae565b858110610d155784929161026c610d0688610c48940390565b610d108786610660565b610bc3565b8361077d87610d2360405190565b9384937fe450d38c00000000000000000000000000000000000000000000000000000000855260048501610b92565b9091610184926001925b909192610d696000610aaa565b6001600160a01b0381166001600160a01b03841614610e37576001600160a01b0381166001600160a01b03851614610ded5750610db484610d1085610daf866001610660565b610660565b610dbd57505050565b610cae610ca4610c9e7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593610657565b61077d90610dfa60405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61077d90610e4460405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b90929192610e8f8183610f9e565b936000198503610ea1575b5050509050565b808510610ec757610eb590610ebe94950390565b90600092610d5c565b80388080610e9a565b9061077d8592610ed660405190565b9384937ffb8f41b200000000000000000000000000000000000000000000000000000000855260048501610b92565b32610f216001600160a01b0383165b916001600160a01b031690565b14610f835733610f396001600160a01b038316610f14565b14610f835760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e6365006044820152606490fd5b61019a90610ce861019a91610f96600090565b506000610660565b90326001600160a01b0383168114908115611062575b5061103e57336001600160a01b0383168114908115611047575b5061103e5760405162461bcd60e51b815260206004820152602160248201527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b61019a9161107d565b905061105b6001600160a01b038316610f14565b1438610fce565b90506110766001600160a01b038316610f14565b1438610fb4565b61019a91610daf610ce892611090600090565b506001610660565b61018491906110c67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106fc565b90610184916110da565b9061018491611098565b91906110e66000610aaa565b926001600160a01b0384166001600160a01b0382161461110a576101849293610c02565b61077d84610b0b60405190565b61018491906111457fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106fc565b611196565b1561115157565b60405162461bcd60e51b815260206004820152601560248201527f496e73756666696369656e742062616c616e63652e00000000000000000000006044820152606490fd5b90610184916111af6111a782610f05565b83111561114a565b6111be565b9061018491611117565b91906111ca6000610aaa565b926001600160a01b0384166001600160a01b038216146111ef57926101849293610c02565b61077d84610b556040519056fea264697066735822122079eebf01d093afea82357215e4515e77a037e9fc967cff9adeeffb005ff0d0bd64736f6c63430008140033a26469706673582212209a640526e5cb5c8f83dfd23a5d720789c63b166b4fa865c4f21523cd2096936764736f6c63430008140033", } // EthereumBridgeABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/GasConsumerBalance/GasConsumerBalance.go b/contracts/generated/GasConsumerBalance/GasConsumerBalance.go index 724c46f8fe..416d2bfaa6 100644 --- a/contracts/generated/GasConsumerBalance/GasConsumerBalance.go +++ b/contracts/generated/GasConsumerBalance/GasConsumerBalance.go @@ -32,7 +32,7 @@ var ( // GasConsumerBalanceMetaData contains all meta data concerning the GasConsumerBalance contract. var GasConsumerBalanceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"destroy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"get_balance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"resetOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50600080546001600160a01b031916331790556101b3806100326000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806373cc802a1461005157806383197ef01461009b5780638da5cb5b146100a3578063c1cfb99a14610099575b600080fd5b61009961005f36600461014d565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b005b6100996100d2565b6000546100b6906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6000546001600160a01b0316331461014a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f596f7520617265206e6f7420746865206f776e65720000000000000000000000604482015260640160405180910390fd5b30ff5b60006020828403121561015f57600080fd5b81356001600160a01b038116811461017657600080fd5b939250505056fea264697066735822122028e65924c674b360c7e0fc6c4d9fb70e74b16d18a3a462b15e37d5b51b9b929b64736f6c63430008140033", + Bin: "0x6080604052346100225761001161008c565b6040516102b361009a82396102b390f35b600080fd5b61003b9061003e906001600160a01b031682565b90565b6001600160a01b031690565b61003b90610027565b61003b9061004a565b9061006c61003b61008892610053565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b61009733600061005c565b56fe6080604052600436101561001257600080fd5b60003560e01c806373cc802a1461005257806383197ef01461004d5780638da5cb5b146100485763c1cfb99a036100775761013f565b61010a565b6100cb565b61009f565b6001600160a01b031690565b90565b6001600160a01b0381160361007757565b600080fd5b9050359061008982610066565b565b90602082820312610077576100639161007c565b34610077576100b76100b236600461008b565b610272565b604051005b0390f35b600091031261007757565b34610077576100db3660046100c0565b6101f0565b610063916008021c6001600160a01b031690565b9061006391546100e0565b6100636000806100f4565b346100775761011a3660046100c0565b6100bc6101256100ff565b604051918291826001600160a01b03909116815260200190565b34610077576100b73660046100c0565b610057610063610063926001600160a01b031690565b6100639061014f565b61006390610165565b61006390610057565b6100639054610177565b1561019157565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f596f7520617265206e6f7420746865206f776e657200000000000000000000006044820152606490fd5b610217336102116102046100576000610180565b916001600160a01b031690565b1461018a565b6102286102233061016e565b61016e565bff5b9061023a61006361026e9261016e565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b61008990600061022a56fea26469706673582212201a7d9388031426ca415c2daf0e882d03e487595c09c4257da41987fb73953c8564736f6c63430008140033", } // GasConsumerBalanceABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/Logger/Logger.go b/contracts/generated/Logger/Logger.go new file mode 100644 index 0000000000..6e7c40424e --- /dev/null +++ b/contracts/generated/Logger/Logger.go @@ -0,0 +1,337 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package Logger + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// LoggerMetaData contains all meta data concerning the Logger contract. +var LoggerMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"LogMessage\",\"type\":\"event\"}]", + Bin: "0x60806040523461002057604051610182610026823930816007015261018290f35b600080fdfe6080604052307f00000000000000000000000000000000000000000000000000000000000000001415600436101561003657600080fd5b60003560e01c632e3c2a4d0361004b576100aa575b600080fd5b909182601f8301121561004b5781359167ffffffffffffffff831161004b57602001926001830284011161004b57565b9060208282031261004b57813567ffffffffffffffff811161004b576100a69201610050565b9091565b6100be6100b8366004610080565b9061010f565b604051005b90826000939282370152565b91906100ed816100e6816100f79560209181520190565b80956100c3565b601f01601f191690565b0190565b602080825261010c939101916100cf565b90565b907f96561394bac381230de4649200e8831afcab1f451881bbade9ef209f6dd304809161014761013e60405190565b928392836100fb565b0390a156fea2646970667358221220cba8e2b6b059209e9c52976e95bdd3b810c6435ce5e51d4312eaafe01f95dfdc64736f6c63430008140033", +} + +// LoggerABI is the input ABI used to generate the binding from. +// Deprecated: Use LoggerMetaData.ABI instead. +var LoggerABI = LoggerMetaData.ABI + +// LoggerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use LoggerMetaData.Bin instead. +var LoggerBin = LoggerMetaData.Bin + +// DeployLogger deploys a new Ethereum contract, binding an instance of Logger to it. +func DeployLogger(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Logger, error) { + parsed, err := LoggerMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(LoggerBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Logger{LoggerCaller: LoggerCaller{contract: contract}, LoggerTransactor: LoggerTransactor{contract: contract}, LoggerFilterer: LoggerFilterer{contract: contract}}, nil +} + +// Logger is an auto generated Go binding around an Ethereum contract. +type Logger struct { + LoggerCaller // Read-only binding to the contract + LoggerTransactor // Write-only binding to the contract + LoggerFilterer // Log filterer for contract events +} + +// LoggerCaller is an auto generated read-only Go binding around an Ethereum contract. +type LoggerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LoggerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type LoggerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LoggerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type LoggerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LoggerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type LoggerSession struct { + Contract *Logger // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LoggerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type LoggerCallerSession struct { + Contract *LoggerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// LoggerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type LoggerTransactorSession struct { + Contract *LoggerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LoggerRaw is an auto generated low-level Go binding around an Ethereum contract. +type LoggerRaw struct { + Contract *Logger // Generic contract binding to access the raw methods on +} + +// LoggerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type LoggerCallerRaw struct { + Contract *LoggerCaller // Generic read-only contract binding to access the raw methods on +} + +// LoggerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type LoggerTransactorRaw struct { + Contract *LoggerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewLogger creates a new instance of Logger, bound to a specific deployed contract. +func NewLogger(address common.Address, backend bind.ContractBackend) (*Logger, error) { + contract, err := bindLogger(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Logger{LoggerCaller: LoggerCaller{contract: contract}, LoggerTransactor: LoggerTransactor{contract: contract}, LoggerFilterer: LoggerFilterer{contract: contract}}, nil +} + +// NewLoggerCaller creates a new read-only instance of Logger, bound to a specific deployed contract. +func NewLoggerCaller(address common.Address, caller bind.ContractCaller) (*LoggerCaller, error) { + contract, err := bindLogger(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &LoggerCaller{contract: contract}, nil +} + +// NewLoggerTransactor creates a new write-only instance of Logger, bound to a specific deployed contract. +func NewLoggerTransactor(address common.Address, transactor bind.ContractTransactor) (*LoggerTransactor, error) { + contract, err := bindLogger(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &LoggerTransactor{contract: contract}, nil +} + +// NewLoggerFilterer creates a new log filterer instance of Logger, bound to a specific deployed contract. +func NewLoggerFilterer(address common.Address, filterer bind.ContractFilterer) (*LoggerFilterer, error) { + contract, err := bindLogger(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &LoggerFilterer{contract: contract}, nil +} + +// bindLogger binds a generic wrapper to an already deployed contract. +func bindLogger(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := LoggerMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Logger *LoggerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Logger.Contract.LoggerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Logger *LoggerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Logger.Contract.LoggerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Logger *LoggerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Logger.Contract.LoggerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Logger *LoggerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Logger.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Logger *LoggerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Logger.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Logger *LoggerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Logger.Contract.contract.Transact(opts, method, params...) +} + +// LoggerLogMessageIterator is returned from FilterLogMessage and is used to iterate over the raw logs and unpacked data for LogMessage events raised by the Logger contract. +type LoggerLogMessageIterator struct { + Event *LoggerLogMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *LoggerLogMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(LoggerLogMessage) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(LoggerLogMessage) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *LoggerLogMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *LoggerLogMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// LoggerLogMessage represents a LogMessage event raised by the Logger contract. +type LoggerLogMessage struct { + Message string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogMessage is a free log retrieval operation binding the contract event 0x96561394bac381230de4649200e8831afcab1f451881bbade9ef209f6dd30480. +// +// Solidity: event LogMessage(string message) +func (_Logger *LoggerFilterer) FilterLogMessage(opts *bind.FilterOpts) (*LoggerLogMessageIterator, error) { + + logs, sub, err := _Logger.contract.FilterLogs(opts, "LogMessage") + if err != nil { + return nil, err + } + return &LoggerLogMessageIterator{contract: _Logger.contract, event: "LogMessage", logs: logs, sub: sub}, nil +} + +// WatchLogMessage is a free log subscription operation binding the contract event 0x96561394bac381230de4649200e8831afcab1f451881bbade9ef209f6dd30480. +// +// Solidity: event LogMessage(string message) +func (_Logger *LoggerFilterer) WatchLogMessage(opts *bind.WatchOpts, sink chan<- *LoggerLogMessage) (event.Subscription, error) { + + logs, sub, err := _Logger.contract.WatchLogs(opts, "LogMessage") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(LoggerLogMessage) + if err := _Logger.contract.UnpackLog(event, "LogMessage", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogMessage is a log parse operation binding the contract event 0x96561394bac381230de4649200e8831afcab1f451881bbade9ef209f6dd30480. +// +// Solidity: event LogMessage(string message) +func (_Logger *LoggerFilterer) ParseLogMessage(log types.Log) (*LoggerLogMessage, error) { + event := new(LoggerLogMessage) + if err := _Logger.contract.UnpackLog(event, "LogMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/generated/ManagementContract/ManagementContract.go b/contracts/generated/ManagementContract/ManagementContract.go index 3c44d39893..3e2072c1f7 100644 --- a/contracts/generated/ManagementContract/ManagementContract.go +++ b/contracts/generated/ManagementContract/ManagementContract.go @@ -62,7 +62,7 @@ type StructsValueTransferMessage struct { // ManagementContractMetaData contains all meta data concerning the ManagementContract contract. var ManagementContractMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ImportantContractAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"messageBusAddress\",\"type\":\"address\"}],\"name\":\"LogManagementContractCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"RollupAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveRevoked\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"r\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"_rollupData\",\"type\":\"string\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"structStructs.HeaderCrossChainData\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"AddRollup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"Attested\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"_msg\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"ExtractNativeValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetImportantContractKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"GetRollupByHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"GetRollupByNumber\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"GetUniqueForkID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"GrantSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_enclaveID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initSecret\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_genesisAttestation\",\"type\":\"string\"}],\"name\":\"InitializeNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"IsSequencerEnclave\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IsWithdrawalAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"requestReport\",\"type\":\"string\"}],\"name\":\"RequestNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attesterID\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"requesterID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"attesterSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responseSecret\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"verifyAttester\",\"type\":\"bool\"}],\"name\":\"RespondNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RetrieveAllBridgeFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"RevokeSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetImportantContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_lastBatchHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockNum\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"rollupNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"forkID\",\"type\":\"bytes32\"}],\"name\":\"addCrossChainMessagesRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"importantContractAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"importantContractKeys\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"}],\"name\":\"isBundleAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isBundleSaved\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isWithdrawalSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSeqNo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"merkleMessageBus\",\"outputs\":[{\"internalType\":\"contractIMerkleTreeMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6143c980620000a06000396000f3fe60806040523480156200001157600080fd5b5060043610620002005760003560e01c8063728109961162000119578063a1a227fa11620000af578063db5d91b1116200007a578063db5d91b114620004f1578063e34fbfc81462000520578063e874eb201462000535578063f2fde38b146200054957600080fd5b8063a1a227fa146200049e578063a4ab2faa14620004b2578063a52f433c14620004c9578063d4fab88714620004da57600080fd5b80638415482611620000f057806384154826146200040a57806387059edb14620004305780638da5cb5b146200044757806398077e86146200047857600080fd5b80637281099614620003cf5780638129fc1c14620003d95780638236a7ba14620003e357600080fd5b8063440c953b116200019b57806368e10383116200016657806368e10383146200037e5780636a30d26c14620003955780636b9707d614620003ae578063715018a614620003c557600080fd5b8063440c953b146200031f5780634766573814620003295780635371a2161462000340578063568699c8146200035757600080fd5b80632c77c81f11620001dc5780632c77c81f14620002525780632f0cb9e314620002695780633e60a22f14620002a057806343348b2f14620002f057600080fd5b80620ddd27146200020557806303e72e481462000222578063073b6ef3146200023b575b600080fd5b6200020f600e5481565b6040519081526020015b60405180910390f35b620002396200023336600462001eb5565b62000560565b005b620002396200024c36600462002000565b62000673565b62000239620002633660046200209d565b62000906565b6200028f6200027a36600462002140565b600c6020526000908152604090205460ff1681565b604051901515815260200162000219565b620002d7620002b13660046200215a565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516001600160a01b03909116815260200162000219565b6200028f620003013660046200219b565b6001600160a01b031660009081526020819052604090205460ff1690565b6200020f60055481565b620002396200033a3660046200219b565b62000a76565b6200023962000351366004620021c0565b62000b46565b6200036e6200036836600462002140565b62000d4f565b60405162000219929190620022e3565b620002396200038f366004620022fe565b62000da8565b6200039f62000e95565b60405162000219919062002388565b62000239620003bf3660046200219b565b62000f78565b620002396200103e565b6200023962001056565b62000239620010da565b620003fa620003f436600462002140565b620012be565b60405162000219929190620023ee565b6200028f6200041b36600462002140565b600d6020526000908152604090205460ff1681565b620003fa6200044136600462002140565b620013ae565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316620002d7565b6200048f6200048936600462002140565b62001428565b6040516200021991906200240b565b600a54620002d7906001600160a01b031681565b6200028f620004c336600462002420565b620014dd565b600454610100900460ff166200028f565b62000239620004eb36600462002459565b6200156e565b6200028f620005023660046200219b565b6001600160a01b031660009081526001602052604090205460ff1690565b620002396200053136600462002504565b5050565b600b54620002d7906001600160a01b031681565b620002396200055a3660046200219b565b62001701565b6200056a6200175e565b60006001600160a01b03166003836040516200058791906200254a565b908152604051908190036020019020546001600160a01b031603620005e657600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01620005e48382620025f7565b505b80600383604051620005f991906200254a565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb590620006679084908490620026c4565b60405180910390a15050565b6000828152600860205260409020548114620006d65760405162461bcd60e51b815260206004820152600e60248201527f496e76616c696420666f726b494400000000000000000000000000000000000060448201526064015b60405180910390fd5b60006200074889898989604051602001620006f59493929190620026f1565b6040516020818303038152906040528051906020012086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620017d592505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620007b55760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f74206174746573746564000000000000000000006044820152606401620006cd565b600e8990556000805b8751811015620008e157600b5488516001600160a01b039091169063b6aed0cb908a9084908110620007f457620007f46200276d565b6020026020010151620008079062002783565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152426024820152604401600060405180830381600087803b1580156200085f57600080fd5b505af115801562000874573d6000803e3d6000fd5b50505050818882815181106200088e576200088e6200276d565b6020026020010151620008a19062002783565b6040805160208101939093528201526060016040516020818303038152906040528051906020012091508080620008d890620027be565b915050620007be565b506000908152600d60205260409020805460ff19166001179055505050505050505050565b60006200095885356200091d6020880188620027da565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620017d592505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620009c55760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f74206174746573746564000000000000000000006044820152606401620006cd565b6001600160a01b03811660009081526001602052604090205460ff1662000a2f5760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e636572000000000000006044820152606401620006cd565b62000a3a8562001805565b604051853581527fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a58906020015b60405180910390a15050505050565b62000a806200175e565b6001600160a01b03811660009081526020819052604090205460ff1662000aea5760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f74206174746573746564000000000000000000006044820152606401620006cd565b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f9062000b9790879087908790879060040162002884565b60006040518083038186803b15801562000bb057600080fd5b505afa15801562000bc5573d6000803e3d6000fd5b5050505060008460405160200162000bde9190620028ec565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff161562000c585760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20616c7265616479207370656e7400000000000000006044820152606401620006cd565b6001600c60008760405160200162000c719190620028ec565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad219162000ccc919089019089016200219b565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301528801356024820152604401600060405180830381600087803b15801562000d2f57600080fd5b505af115801562000d44573d6000803e3d6000fd5b505050505050505050565b60408051606080820183526000808352602083019190915291810182905260008062000d7b85620013ae565b915091508162000d915760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff161562000e235760405162461bcd60e51b815260206004820152602260248201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401620006cd565b60048054600160ff1991821681179092556001600160a01b038716600081815260208181526040808320805486168717905585825291829020805490941690941790925590519081527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e760936910162000a67565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101562000f6f57838290600052602060002001805462000edb9062002568565b80601f016020809104026020016040519081016040528092919081815260200182805462000f099062002568565b801562000f5a5780601f1062000f2e5761010080835404028352916020019162000f5a565b820191906000526020600020905b81548152906001019060200180831162000f3c57829003601f168201915b50505050508152602001906001019062000eb9565b50505050905090565b62000f826200175e565b6001600160a01b03811660009081526001602052604090205460ff1662000fec5760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e636572000000000000006044820152606401620006cd565b6001600160a01b038116600081815260016020908152604091829020805460ff1916905590519182527f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47910162000b3b565b620010486200175e565b620010546000620018ba565b565b620010606200175e565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906336d2da9090602401600060405180830381600087803b158015620010bf57600080fd5b505af1158015620010d4573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015620011265750825b905060008267ffffffffffffffff166001148015620011445750303b155b90508115801562001153575080155b156200118b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315620011c057845468ff00000000000000001916680100000000000000001785555b620011cb3362001938565b60006005556001600955604051620011e39062001dc9565b604051809103906000f08015801562001200573d6000803e3d6000fd5b50600b805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0393909316928317909155600a8054909116821790556040519081527fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9060200160405180910390a18315620012b757845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200162000a67565b5050505050565b6040805160608082018352600080835260208084018390528385018290528582526006815284822085519384019095528454835260018501805492958694939092840191906200130e9062002568565b80601f01602080910402602001604051908101604052809291908181526020018280546200133c9062002568565b80156200138d5780601f1062001361576101008083540402835291602001916200138d565b820191906000526020600020905b8154815290600101906020018083116200136f57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b604080516060808201835260008083526020830191909152918101829052600083815260076020526040812054908190036200141357505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b6200141e81620012be565b9250925050915091565b600281815481106200143957600080fd5b906000526020600020016000915090508054620014569062002568565b80601f0160208091040260200160405190810160405280929190818152602001828054620014849062002568565b8015620014d55780601f10620014a957610100808354040283529160200191620014d5565b820191906000526020600020905b815481529060010190602001808311620014b757829003601f168201915b505050505081565b600080805b83518110156200155557818482815181106200150257620015026200276d565b6020026020010151620015159062002783565b60408051602081019390935282015260600160405160208183030381529060405280519060200120915080806200154c90620027be565b915050620014e2565b506000908152600d602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff1680620015ff5760405162461bcd60e51b815260206004820152602360248201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360448201527f74656400000000000000000000000000000000000000000000000000000000006064820152608401620006cd565b8115620016d6576000620016388787866040516020016200162393929190620028fc565b6040516020818303038152906040526200194d565b90506000620016488287620017d5565b9050876001600160a01b0316816001600160a01b031614620016d35760405162461bcd60e51b815260206004820152602c60248201527f63616c63756c61746564206164647265737320616e642061747465737465724960448201527f4420646f6e74206d6174636800000000000000000000000000000000000000006064820152608401620006cd565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b6200170b6200175e565b6001600160a01b03811662001750576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401620006cd565b6200175b81620018ba565b50565b33620017917f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161462001054576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401620006cd565b600080600080620017e786866200198c565b925092509250620017f98282620019dd565b50909150505b92915050565b80356000908152600660205260409020819062001823828262002944565b505060095460009081526007602052604090208135908190556200184960014362002a54565b4060405160200162001865929190918252602082015260400190565b60408051601f1981840301815291815281516020928301206009805460009081526008909452918320558054916200189d83620027be565b9190505550600554816040013511156200175b5760400135600555565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6200194262001af3565b6200175b8162001b5b565b60006200195b825162001b65565b826040516020016200196f92919062002a6a565b604051602081830303815290604052805190602001209050919050565b60008060008351604103620019ca5760208401516040850151606086015160001a620019bb8882858562001c0c565b955095509550505050620019d6565b50508151600091506002905b9250925092565b6000826003811115620019f457620019f462002ac9565b03620019fe575050565b600182600381111562001a155762001a1562002ac9565b0362001a4d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111562001a645762001a6462002ac9565b0362001aa0576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401620006cd565b600382600381111562001ab75762001ab762002ac9565b0362000531576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401620006cd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662001054576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200170b62001af3565b6060600062001b748362001ce0565b600101905060008167ffffffffffffffff81111562001b975762001b9762001dd7565b6040519080825280601f01601f19166020018201604052801562001bc2576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508462001bcc57509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111562001c49575060009150600390508262001cd6565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801562001c9e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811662001ccc5750600092506001915082905062001cd6565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831062001d2a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831062001d57576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831062001d7657662386f26fc10000830492506010015b6305f5e100831062001d8f576305f5e100830492506008015b612710831062001da457612710830492506004015b6064831062001db7576064830492506002015b600a8310620017ff5760010192915050565b6118b48062002ae083390190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562001e195762001e1962001dd7565b604052919050565b600082601f83011262001e3357600080fd5b813567ffffffffffffffff81111562001e505762001e5062001dd7565b62001e65601f8201601f191660200162001ded565b81815284602083860101111562001e7b57600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160a01b038116811462001eb057600080fd5b919050565b6000806040838503121562001ec957600080fd5b823567ffffffffffffffff81111562001ee157600080fd5b62001eef8582860162001e21565b92505062001f006020840162001e98565b90509250929050565b600082601f83011262001f1b57600080fd5b8135602067ffffffffffffffff8083111562001f3b5762001f3b62001dd7565b8260051b62001f4c83820162001ded565b938452858101830193838101908886111562001f6757600080fd5b84880192505b8583101562001fa85782358481111562001f875760008081fd5b62001f978a87838c010162001e21565b835250918401919084019062001f6d565b98975050505050505050565b60008083601f84011262001fc757600080fd5b50813567ffffffffffffffff81111562001fe057600080fd5b60208301915083602082850101111562001ff957600080fd5b9250929050565b60008060008060008060008060e0898b0312156200201d57600080fd5b883597506020890135965060408901359550606089013567ffffffffffffffff808211156200204b57600080fd5b620020598c838d0162001f09565b965060808b01359150808211156200207057600080fd5b506200207f8b828c0162001fb4565b999c989b5096999598969760a08701359660c0013595509350505050565b60008060008060608587031215620020b457600080fd5b843567ffffffffffffffff80821115620020cd57600080fd5b9086019060608289031215620020e257600080fd5b90945060208601359080821115620020f957600080fd5b620021078883890162001fb4565b909550935060408701359150808211156200212157600080fd5b508501602081880312156200213557600080fd5b939692955090935050565b6000602082840312156200215357600080fd5b5035919050565b6000602082840312156200216d57600080fd5b813567ffffffffffffffff8111156200218557600080fd5b620021938482850162001e21565b949350505050565b600060208284031215620021ae57600080fd5b620021b98262001e98565b9392505050565b60008060008084860360c0811215620021d857600080fd5b6080811215620021e757600080fd5b50849350608085013567ffffffffffffffff808211156200220757600080fd5b818701915087601f8301126200221c57600080fd5b8135818111156200222c57600080fd5b8860208260051b85010111156200224257600080fd5b95986020929092019750949560a00135945092505050565b60005b83811015620022775781810151838201526020016200225d565b50506000910152565b600081518084526200229a8160208601602086016200225a565b601f01601f19169290920160200192915050565b805182526000602082015160606020850152620022cf606085018262002280565b604093840151949093019390935250919050565b828152604060208201526000620021936040830184620022ae565b6000806000806000606086880312156200231757600080fd5b620023228662001e98565b9450602086013567ffffffffffffffff808211156200234057600080fd5b6200234e89838a0162001fb4565b909650945060408801359150808211156200236857600080fd5b50620023778882890162001fb4565b969995985093965092949392505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015620023e157603f19888603018452620023ce85835162002280565b94509285019290850190600101620023af565b5092979650505050505050565b8215158152604060208201526000620021936040830184620022ae565b602081526000620021b9602083018462002280565b6000602082840312156200243357600080fd5b813567ffffffffffffffff8111156200244b57600080fd5b620021938482850162001f09565b600080600080600060a086880312156200247257600080fd5b6200247d8662001e98565b94506200248d6020870162001e98565b9350604086013567ffffffffffffffff80821115620024ab57600080fd5b620024b989838a0162001e21565b94506060880135915080821115620024d057600080fd5b50620024df8882890162001e21565b92505060808601358015158114620024f657600080fd5b809150509295509295909350565b600080602083850312156200251857600080fd5b823567ffffffffffffffff8111156200253057600080fd5b6200253e8582860162001fb4565b90969095509350505050565b600082516200255e8184602087016200225a565b9190910192915050565b600181811c908216806200257d57607f821691505b6020821081036200259e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620025f257600081815260208120601f850160051c81016020861015620025cd5750805b601f850160051c820191505b81811015620025ee57828155600101620025d9565b5050505b505050565b815167ffffffffffffffff81111562002614576200261462001dd7565b6200262c8162002625845462002568565b84620025a4565b602080601f8311600181146200266457600084156200264b5750858301515b600019600386901b1c1916600185901b178555620025ee565b600085815260208120601f198616915b82811015620026955788860151825594840194600190910190840162002674565b5085821015620026b45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000620026d9604083018562002280565b90506001600160a01b03831660208301529392505050565b600060808201868352602086818501528560408501526080606085015281855180845260a08601915060a08160051b870101935082870160005b828110156200275d57609f198887030184526200274a86835162002280565b955092840192908401906001016200272b565b50939a9950505050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208083015191908110156200259e5760001960209190910360031b1b16919050565b634e487b7160e01b600052601160045260246000fd5b600060018201620027d357620027d3620027a8565b5060010190565b6000808335601e19843603018112620027f257600080fd5b83018035915067ffffffffffffffff8211156200280e57600080fd5b60200191503681900382131562001ff957600080fd5b6001600160a01b0380620028388362001e98565b168352806200284a6020840162001e98565b1660208401525060408101356040830152606081013567ffffffffffffffff81168082146200287857600080fd5b80606085015250505050565b62002890818662002824565b60c060808201528260c082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115620028cd57600080fd5b8360051b808660e085013760a0830193909352500160e0019392505050565b60808101620017ff828462002824565b60006bffffffffffffffffffffffff19808660601b168352808560601b166014840152508251620029358160288501602087016200225a565b91909101602801949350505050565b813581556001808201602080850135601e198636030181126200296657600080fd5b8501803567ffffffffffffffff8111156200298057600080fd5b80360383830113156200299257600080fd5b620029aa81620029a3865462002568565b86620025a4565b6000601f821160018114620029e35760008315620029ca57508382018501355b600019600385901b1c1916600184901b17865562002a3f565b600086815260209020601f19841690835b8281101562002a1557868501880135825593870193908901908701620029f4565b508482101562002a355760001960f88660031b161c198785880101351681555b50508683881b0186555b50505050505050604082013560028201555050565b81810381811115620017ff57620017ff620027a8565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526000835162002aa481601a8501602088016200225a565b83519083019062002abd81601a8401602088016200225a565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fdfe608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61180f806100a56000396000f3fe6080604052600436106100e15760003560e01c80639730886d1161007f578063b201246f11610059578063b201246f1461030e578063b6aed0cb1461032e578063e138a8d21461034e578063f2fde38b1461036e57610155565b80639730886d1461029557806399a3ad21146102b5578063b1454caa146102d557610155565b8063346633fb116100bb578063346633fb1461022557806336d2da9014610238578063715018a6146102585780638da5cb5b1461026d57610155565b80630fcfbd11146101a25780630fe9188e146101d557806333a88c72146101f557610155565b36610155576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561013f57600080fd5b505af1158015610153573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b3480156101ae57600080fd5b506101c26101bd366004610f78565b61038e565b6040519081526020015b60405180910390f35b3480156101e157600080fd5b506101536101f0366004610fad565b610428565b34801561020157600080fd5b50610215610210366004610f78565b61049e565b60405190151581526020016101cc565b610153610233366004610fdb565b6104f1565b34801561024457600080fd5b50610153610253366004611007565b6105d4565b34801561026457600080fd5b50610153610683565b34801561027957600080fd5b506000546040516001600160a01b0390911681526020016101cc565b3480156102a157600080fd5b506101536102b0366004611024565b610697565b3480156102c157600080fd5b506101536102d0366004610fdb565b6107e9565b3480156102e157600080fd5b506102f56102f036600461109a565b610899565b60405167ffffffffffffffff90911681526020016101cc565b34801561031a57600080fd5b50610153610329366004611193565b6108f2565b34801561033a57600080fd5b506101536103493660046111f5565b610af4565b34801561035a57600080fd5b50610153610369366004611217565b610b90565b34801561037a57600080fd5b50610153610389366004611007565b610d70565b600080826040516020016103a291906112c6565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806104215760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d69747465646044820152601760f91b6064820152608401610199565b9392505050565b610430610dc7565b600081815260046020526040812054900361048d5760405162461bcd60e51b815260206004820152601a60248201527f537461746520726f6f7420646f6573206e6f742065786973742e0000000000006044820152606401610199565b600090815260046020526040812055565b600080826040516020016104b291906112c6565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906104e95750428111155b949350505050565b60003411801561050057508034145b6105725760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e67204574686572000000000000000000000000000000006064820152608401610199565b600061057d33610e0d565b6040805134815267ffffffffffffffff831660208201529192506001600160a01b0385169133917f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6910160405180910390a3505050565b6105dc610dc7565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610629576040519150601f19603f3d011682016040523d82523d6000602084013e61062e565b606091505b505090508061067f5760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606401610199565b5050565b61068b610dc7565b6106956000610e6b565b565b61069f610dc7565b60006106ab82426113c7565b90506000836040516020016106c091906112c6565b60408051601f198184030181529181528151602092830120600081815260019093529120549091501561075b5760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608401610199565b600081815260016020908152604082208490556002919061077e90870187611007565b6001600160a01b0316815260208101919091526040016000908120906107aa60808701606088016113da565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016107e182826115a8565b505050505050565b6107f1610dc7565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461083e576040519150601f19603f3d011682016040523d82523d6000602084013e610843565b606091505b50509050806108945760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606401610199565b505050565b60006108a433610e0d565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516108e197969594939291906116c2565b60405180910390a195945050505050565b60008181526004602052604081205490036109625760405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201526939b9b0b3b290313ab99760b11b6064820152608401610199565b6000818152600460205260409020544210156109ca5760405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608401610199565b6000846040516020016109dd9190611722565b60408051601f198184030181528282528051602091820120908301829052600160608401527f760000000000000000000000000000000000000000000000000000000000000060808401529082015260a001604051602081830303815290604052805190602001209050610a7b84848484604051602001610a6091815260200190565b60405160208183030381529060405280519060200120610ec8565b610aed5760405162461bcd60e51b815260206004820152603360248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7560448201527f65207472616e73666572206d6573736167652e000000000000000000000000006064820152608401610199565b5050505050565b610afc610dc7565b60008281526004602052604090205415610b7e5760405162461bcd60e51b815260206004820152602560248201527f526f6f7420616c726561647920616464656420746f20746865206d657373616760448201527f65206275730000000000000000000000000000000000000000000000000000006064820152608401610199565b60009182526004602052604090912055565b6000818152600460205260408120549003610c005760405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201526939b9b0b3b290313ab99760b11b6064820152608401610199565b600081815260046020526040902054421015610c685760405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608401610199565b600084604051602001610c7b91906112c6565b60408051601f198184030181528282528051602091820120908301829052600160608401527f6d0000000000000000000000000000000000000000000000000000000000000060808401529082015260a001604051602081830303815290604052805190602001209050610cfe84848484604051602001610a6091815260200190565b610aed5760405162461bcd60e51b815260206004820152603060248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7360448201527f7320636861696e206d6573736167652e000000000000000000000000000000006064820152608401610199565b610d78610dc7565b6001600160a01b038116610dbb576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610199565b610dc481610e6b565b50565b6000546001600160a01b03163314610695576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610199565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff169160019190610e408385611782565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082610ed6868685610ee0565b1495945050505050565b600081815b84811015610f2357610f0f82878784818110610f0357610f036117aa565b90506020020135610f2c565b915080610f1b816117c0565b915050610ee5565b50949350505050565b6000818310610f48576000828152602084905260409020610f57565b60008381526020839052604090205b90505b92915050565b600060c08284031215610f7257600080fd5b50919050565b600060208284031215610f8a57600080fd5b813567ffffffffffffffff811115610fa157600080fd5b6104e984828501610f60565b600060208284031215610fbf57600080fd5b5035919050565b6001600160a01b0381168114610dc457600080fd5b60008060408385031215610fee57600080fd5b8235610ff981610fc6565b946020939093013593505050565b60006020828403121561101957600080fd5b813561042181610fc6565b6000806040838503121561103757600080fd5b823567ffffffffffffffff81111561104e57600080fd5b61105a85828601610f60565b95602094909401359450505050565b63ffffffff81168114610dc457600080fd5b60ff81168114610dc457600080fd5b80356110958161107b565b919050565b6000806000806000608086880312156110b257600080fd5b85356110bd81611069565b945060208601356110cd81611069565b9350604086013567ffffffffffffffff808211156110ea57600080fd5b818801915088601f8301126110fe57600080fd5b81358181111561110d57600080fd5b89602082850101111561111f57600080fd5b60208301955080945050505060608601356111398161107b565b809150509295509295909350565b60008083601f84011261115957600080fd5b50813567ffffffffffffffff81111561117157600080fd5b6020830191508360208260051b850101111561118c57600080fd5b9250929050565b60008060008084860360c08112156111aa57600080fd5b60808112156111b857600080fd5b50849350608085013567ffffffffffffffff8111156111d657600080fd5b6111e287828801611147565b9598909750949560a00135949350505050565b6000806040838503121561120857600080fd5b50508035926020909101359150565b6000806000806060858703121561122d57600080fd5b843567ffffffffffffffff8082111561124557600080fd5b61125188838901610f60565b9550602087013591508082111561126757600080fd5b5061127487828801611147565b9598909750949560400135949350505050565b67ffffffffffffffff81168114610dc457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600082356112d781610fc6565b6001600160a01b03811660208401525060208301356112f581611287565b67ffffffffffffffff80821660408501526040850135915061131682611069565b63ffffffff80831660608601526060860135925061133383611069565b80831660808601525060808501359150601e1985360301821261135557600080fd5b602091850191820191358181111561136c57600080fd5b80360383131561137b57600080fd5b60c060a086015261139060e08601828561129d565b925050506113a060a0850161108a565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f5a57610f5a6113b1565b6000602082840312156113ec57600080fd5b813561042181611069565b60008135610f5a81611069565b6000808335601e1984360301811261141b57600080fd5b83018035915067ffffffffffffffff82111561143657600080fd5b60200191503681900382131561118c57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061147557607f821691505b602082108103610f7257634e487b7160e01b600052602260045260246000fd5b601f82111561089457600081815260208120601f850160051c810160208610156114bc5750805b601f850160051c820191505b818110156107e1578281556001016114c8565b67ffffffffffffffff8311156114f3576114f361144b565b611507836115018354611461565b83611495565b6000601f84116001811461153b57600085156115235750838201355b600019600387901b1c1916600186901b178355610aed565b600083815260209020601f19861690835b8281101561156c578685013582556020948501946001909201910161154c565b50868210156115895760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008135610f5a8161107b565b81356115b381610fc6565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff19821617835560208401356115eb81611287565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff000000000000000000000000000000000000000000000000000000008184828516171785556040860135925061164983611069565b921760e09190911b909116178155611681611666606084016113f7565b6001830163ffffffff821663ffffffff198254161781555050565b61168e6080830183611404565b61169c8183600286016114db565b505061067f6116ad60a0840161159b565b6003830160ff821660ff198254161781555050565b6001600160a01b038816815267ffffffffffffffff87166020820152600063ffffffff808816604084015280871660608401525060c0608083015261170b60c08301858761129d565b905060ff831660a083015298975050505050505050565b60808101823561173181610fc6565b6001600160a01b03908116835260208401359061174d82610fc6565b16602083015260408381013590830152606083013561176b81611287565b67ffffffffffffffff811660608401525092915050565b67ffffffffffffffff8181168382160190808211156117a3576117a36113b1565b5092915050565b634e487b7160e01b600052603260045260246000fd5b6000600182016117d2576117d26113b1565b506001019056fea264697066735822122078bebc469f5cbd8c097a1657385a1d8552a3feee7913c0a4f7f5badba2928b8764736f6c63430008140033a26469706673582212208cd0e19ba187bd881a9d1e04b630f56d0a1568716b97f0a2bd79fc90ed4b3f3164736f6c63430008140033", + Bin: "0x6080604052346200002657620000146200002b565b6040516151e36200013b82396151e390f35b600080fd5b6200003633620000b9565b565b6200004a905b6001600160a01b031690565b90565b6200004a905462000038565b6200004a906200003e906001600160a01b031682565b6200004a9062000059565b6200004a906200006f565b90620000996200004a620000b5926200007a565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090620000f281620000eb846200004d565b9362000085565b62000129620001227f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936200007a565b916200007a565b916200013460405190565b600090a356fe608060405260043610156200001357600080fd5b60003560e01c80620ddd27146200022d57806303e72e481462000227578063073b6ef314620002215780632c77c81f146200021b5780632f0cb9e314620002155780633e60a22f146200020f57806343348b2f1462000209578063440c953b14620002035780634766573814620001fd5780635371a21614620001f7578063568699c814620001f157806368e1038314620001eb5780636a30d26c14620001e55780636b9707d614620001df578063715018a614620001d95780637281099614620001d35780638129fc1c14620001cd5780638236a7ba14620001c75780638415482614620001c157806387059edb14620001bb5780638da5cb5b14620001b557806398077e8614620001af578063a1a227fa14620001a9578063a4ab2faa14620001a3578063a52f433c146200019d578063d4fab8871462000197578063db5d91b11462000191578063e34fbfc8146200018b578063e874eb2014620001855763f2fde38b036200023f57620010ff565b620010de565b620010b6565b6200106b565b6200104a565b62000f91565b62000f70565b62000f18565b62000e83565b62000cac565b62000c8f565b62000c6e565b62000c23565b62000bf1565b62000bd4565b62000bb7565b62000b9a565b62000b6c565b62000ab8565b62000a1f565b62000979565b620008ce565b620008ad565b6200087e565b62000838565b620006e9565b6200065f565b620005a7565b620003f9565b62000274565b60009103126200023f57565b600080fd5b62000250916008021c81565b90565b9062000250915462000244565b620002506000600e62000253565b9052565b565b346200023f576200028736600462000233565b620002a66200029562000260565b6040515b9182918290815260200190565b0390f35b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff821117620002e357604052565b620002aa565b9062000272620002f860405190565b9283620002c0565b67ffffffffffffffff8111620002e357602090601f01601f19160190565b0190565b90826000939282370152565b9092919262000347620003418262000300565b620002e9565b938185526020850190828401116200023f57620002729262000322565b9080601f830112156200023f5781602062000250933591016200032e565b73ffffffffffffffffffffffffffffffffffffffff1690565b620003a68162000382565b036200023f57565b9050359062000272826200039b565b91906040838203126200023f5782359067ffffffffffffffff82116200023f57620003ef816200025093860162000364565b93602001620003ae565b346200023f576200041762000410366004620003bd565b9062003469565b604051005b80620003a6565b9050359062000272826200041c565b67ffffffffffffffff8111620002e35760208091020190565b9291906200045d620003418262000432565b93818552602080860192028101918383116200023f5781905b83821062000485575050505050565b813567ffffffffffffffff81116200023f57602091620004a9878493870162000364565b81520191019062000476565b9080601f830112156200023f5781602062000250933591016200044b565b909182601f830112156200023f5781359167ffffffffffffffff83116200023f5760200192600183028401116200023f57565b9160e0838303126200023f576200051e828462000423565b926200052e836020830162000423565b926200053e816040840162000423565b92606083013567ffffffffffffffff81116200023f578262000562918501620004b5565b9260808101359167ffffffffffffffff83116200023f576200058b8462000250948401620004d3565b9390946200059d8160a0860162000423565b9360c00162000423565b346200023f5762000417620005be36600462000506565b9695909594919493929362001d5a565b908160609103126200023f5790565b908160209103126200023f5790565b6060818303126200023f57803567ffffffffffffffff81116200023f578262000617918301620005ce565b92602082013567ffffffffffffffff81116200023f57836200063b918401620004d3565b929093604082013567ffffffffffffffff81116200023f57620002509201620005dd565b346200023f576200041762000676366004620005ec565b92919091620022dc565b906020828203126200023f57620002509162000423565b90620006a39062000250565b600052602052604060002090565b62000250916008021c5b60ff1690565b90620002509154620006b1565b6200025090620006e3600c9160009262000697565b620006c1565b346200023f57620002a66200070a6200070436600462000680565b620006ce565b60405191829182901515815260200190565b906020828203126200023f57813567ffffffffffffffff81116200023f5762000250920162000364565b60005b8381106200075a5750506000910152565b818101518382015260200162000749565b6200031e620007869260209262000780815190565b94859290565b9384910162000746565b620007a36200031e91602094936200076b565b918252565b620007c0620007b660405190565b9283928362000790565b03902090565b6200025091620007a8565b62000250916008021c73ffffffffffffffffffffffffffffffffffffffff1690565b90620002509154620007d1565b620002509062000815600391600092620007c6565b620007f3565b6200026e9062000382565b6020810192916200027291906200081b565b346200023f57620002a662000859620008533660046200071c565b62000800565b6040515b9182918262000826565b906020828203126200023f576200025091620003ae565b346200023f57620002a66200070a6200089936600462000867565b620030b3565b620002506000600562000253565b346200023f57620008c036600462000233565b620002a6620002956200089f565b346200023f5762000417620008e536600462000867565b6200311f565b908160809103126200023f5790565b909182601f830112156200023f5781359167ffffffffffffffff83116200023f5760200192602083028401116200023f57565b9060c0828203126200023f57620009458183620008eb565b92608083013567ffffffffffffffff81116200023f576200096d8362000250928601620008fa565b93909460a00162000423565b346200023f5762000417620009903660046200092d565b929190916200297f565b620009bf620009c96020936200031e93620009b3815190565b80835293849260200190565b9586910162000746565b601f01601f191690565b80518252906200025090604080620009fb60608401602087015185820360208701526200099a565b940151910152565b908152620002509160408201915b6020818403910152620009d3565b346200023f5762000a3c62000a3636600462000680565b62001a1f565b90620002a662000a4b60405190565b9283928362000a03565b6060818303126200023f5762000a6c8282620003ae565b92602082013567ffffffffffffffff81116200023f578362000a90918401620004d3565b929093604082013567ffffffffffffffff81116200023f5762000ab49201620004d3565b9091565b346200023f576200041762000acf36600462000a55565b939290926200271f565b9062000250916200099a565b9062000afd62000af3835190565b8083529160200190565b908162000b106020830284019460200190565b926000915b83831062000b2557505050505090565b9091929394602062000b4b62000b448385600195038752895162000ad9565b9760200190565b930193019193929062000b15565b6020808252620002509291019062000ae5565b346200023f5762000b7f36600462000233565b620002a662000b8d620034f7565b6040519182918262000b59565b346200023f576200041762000bb136600462000867565b620031de565b346200023f5762000bca36600462000233565b62000417620011a3565b346200023f5762000be736600462000233565b620004176200326b565b346200023f5762000c0436600462000233565b6200041762001720565b90151581526200025091604082019162000a11565b346200023f5762000c4062000c3a36600462000680565b62001912565b90620002a662000c4f60405190565b9283928362000c0e565b6200025090620006e3600d9160009262000697565b346200023f57620002a66200070a62000c8936600462000680565b62000c59565b346200023f5762000c4062000ca636600462000680565b62001984565b346200023f5762000cbf36600462000233565b620002a66200085962001133565b634e487b7160e01b600052603260045260246000fd5b805482101562000d085762000cff600191600052602060002090565b91020190600090565b62000ccd565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801562000d5d575b602083101462000d5757565b62000d24565b91607f169162000d4b565b8054600093929162000d8862000d7e8362000d3a565b8085529360200190565b916001811690811562000ddf575060011462000da357505050565b62000db79192939450600052602060002090565b916000925b81841062000dca5750500190565b80548484015260209093019260010162000dbc565b92949550505060ff1916825215156020020190565b90620002509162000d68565b906200027262000e1e9262000e1460405190565b9384809262000df4565b0383620002c0565b9060001062000e3a57620002509062000e00565b62000d0e565b6002600062000e4d825490565b83101562000e6d5750620002509162000e669162000ce3565b9062000e26565b80fd5b602080825262000250929101906200099a565b346200023f57620002a662000ea462000e9e36600462000680565b62000e40565b6040519182918262000e70565b620002506000600a620007f3565b6200038262000250620002509273ffffffffffffffffffffffffffffffffffffffff1690565b620002509062000ebf565b620002509062000ee5565b6200026e9062000ef0565b60208101929162000272919062000efb565b346200023f5762000f2b36600462000233565b620002a662000f3962000eb1565b6040519182918262000f06565b906020828203126200023f57813567ffffffffffffffff81116200023f57620002509201620004b5565b346200023f57620002a66200070a62000f8b36600462000f46565b62001b1f565b346200023f5762000fa436600462000233565b620002a66200070a620030a7565b801515620003a6565b90503590620002728262000fb2565b919060a0838203126200023f5762000fe38184620003ae565b9262000ff38260208301620003ae565b92604082013567ffffffffffffffff81116200023f57836200101791840162000364565b9260608301359067ffffffffffffffff82116200023f5762001040816200025093860162000364565b9360800162000fbb565b346200023f57620004176200106136600462000fca565b9392909262002c5f565b346200023f57620002a66200070a6200108636600462000867565b620030ce565b906020828203126200023f57813567ffffffffffffffff81116200023f5762000ab49201620004d3565b346200023f57620010c93660046200108c565b5050604051005b620002506000600b620007f3565b346200023f57620010f136600462000233565b620002a662000f39620010d0565b346200023f57620004176200111636600462000867565b6200129d565b620002509062000382565b6200025090546200111c565b620002507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930062001127565b62001168620011ad565b620002726200118d565b6200038262000250620002509290565b620002509062001172565b620002726200119d600062001182565b620012ea565b620002726200115e565b620011b762001133565b3390620011cf620011c88362000382565b9162000382565b03620011d85750565b6200121790620011e760405190565b9182917f118cdaa70000000000000000000000000000000000000000000000000000000083526004830162000826565b0390fd5b62000272906200122a620011ad565b62001236600062001182565b620012418162000382565b6200124c8362000382565b146200125e57506200027290620012ea565b62001217906200126d60405190565b9182917f1e4fbdf70000000000000000000000000000000000000000000000000000000083526004830162000826565b62000272906200121b565b9073ffffffffffffffffffffffffffffffffffffffff905b9181191691161790565b90620012de62000250620012e69262000ef0565b8254620012a8565b9055565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993009062001323816200131c8462001127565b93620012ca565b6200135a620013537f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000ef0565b9162000ef0565b916200136560405190565b600090a3565b620002509060401c620006bb565b6200025090546200136b565b62000250905b67ffffffffffffffff1690565b62000250905462001385565b6200138b62000250620002509290565b6200025062000250620002509290565b9067ffffffffffffffff90620012c0565b6200138b62000250620002509267ffffffffffffffff1690565b906200140362000250620012e692620013d5565b8254620013c4565b9068ff00000000000000009060401b620012c0565b151590565b906200143962000250620012e69262001420565b82546200140b565b6200026e90620013a4565b60208101929162000272919062001441565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00806200149e62001497620014938362001379565b1590565b9262001398565b91600090620014ad82620013a4565b67ffffffffffffffff85161480620015ee575b600194620014e0620014d287620013a4565b9167ffffffffffffffff1690565b149081620015bf575b155b9081620015b5575b506200158a578062001514836200150a87620013a4565b95019485620013ef565b62001578575b6200152462001629565b6200152e57505050565b620015399162001425565b620015737fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916200156960405190565b918291826200144c565b0390a1565b62001584848462001425565b6200151a565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b15905038620014f3565b9050620014eb620015d03062000ef0565b3b620015e4620015e086620013b4565b9190565b14919050620014e9565b5080620014c0565b9060001990620012c0565b906200161562000250620012e692620013b4565b8254620015f6565b6040513d6000823e3d90fd5b620016343362001744565b60006200164d6200164582620013b4565b600562001601565b620016656200165d6001620013b4565b600962001601565b604051611caa810181811067ffffffffffffffff821117620002e357620016938291611caa62003504843990565b0391f080156200171a57620016ac620016b49162000ef0565b600b620012ca565b620016da620016d2620016cc620016cc600b62001127565b62000ef0565b600a620012ca565b620016ea620016cc600a62001127565b620015737fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf916200085d60405190565b6200161d565b620002726200145e565b62000272906200173962001769565b62000272906200175e565b62000272906200172a565b62000272906200122a62001769565b62000272906200174f565b6200177762001493620017a9565b6200177e57565b6040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152600490fd5b620002507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0062001379565b620002506060620002e9565b620017ea620017d4565b600080825260606020830152604082015290565b62000250620017e0565b620002509081565b62000250905462001808565b805460009392916200183262000d7e8362000d3a565b916001811690811562000ddf57506001146200184d57505050565b620018619192939450600052602060002090565b916000925b818410620018745750500190565b80548484015260209093019260010162001866565b9062000250916200181c565b906200027262000e1e92620018a960405190565b9384809262001889565b9062000272620018fc6002620018c8620017d4565b94620018dc620018d88262001810565b8752565b620018f5620018ee6001830162001895565b6020880152565b0162001810565b6040840152565b6200025090620018b3565b5190565b906200191d620017fe565b50620019356200192f83600662000697565b62001903565b916200194d620015e062001949856200190e565b9290565b149190565b90620006a390620013b4565b90620007a3620003418362000300565b6200025060006200195e565b620002506200196e565b620019aa620019b09162001996600090565b50620019a1620017fe565b50600762001952565b62001810565b90600091620019bf83620013b4565b8114620019d35762000ab491925062001912565b50620019de620017d4565b91620019f4620019ee82620013b4565b82850152565b62001a0962001a026200197a565b6020850152565b620015e062001a1882620013b4565b6040850152565b62001a41919062001a2f620017fe565b5062001a3b8162001984565b93901590565b62001a5857620015e090620019aa90600862001952565b50620015e06000620013b4565b634e487b7160e01b600052601160045260246000fd5b600019811462001a8b5760010190565b62001a65565b9062001a9b825190565b81101562000d08576020809102010190565b62001acb62001ac562001abe835190565b9260200190565b6200190e565b906020811062001ad9575090565b62001aec90600019906020036008021b90565b1690565b908152604081019291620002729160200152565b0152565b6200025090620006bb565b62000250905462001b08565b60009062001b3862001b3183620013b4565b92620013b4565b915b62001b4762000250835190565b83101562001bbd5762001b8d62001b9a62001bb69262001b7362001b6c878762001a91565b5162001aad565b9062001b7e60405190565b93849260208401928362001af0565b90810382520382620002c0565b62001bae62001ba7825190565b9160200190565b209262001a7b565b9162001b3a565b62000250925062001bd19150600d62000697565b62001b13565b6020808252600e908201527f496e76616c696420666f726b4944000000000000000000000000000000000000604082015260600190565b9062001c1c62000af3835190565b908162001c2f6020830284019460200190565b926000915b83831062001c4457505050505090565b9091929394602062001c6362000b448385600195038752895162000ad9565b930193019193929062001c34565b909262001c999062001c9262000250969462001a0260808601976000870152565b6040830152565b606081840391015262001c0e565b620002509136916200032e565b90620006a39062000ef0565b60208082526016908201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604082015260600190565b1562001cff57565b60405162461bcd60e51b815280620012176004820162001cc0565b906200161562001d2e620012e69262000250565b62000250565b9060ff90620012c0565b9062001d5262000250620012e69262001420565b825462001d34565b95620015e062001949620019aa62001d7e939b9a949597969b600260060162001952565b0362001f215762001df7938762001db662001dd29562001dcb9462001b8d62001da660405190565b94859360208501938d8562001c71565b62001dc362001ba7825190565b209262001ca7565b9062001f3c565b9162001def62001de962001bd16000958662001cb4565b62001cf7565b600e62001d1a565b62001e0281620013b4565b9262001e0e82620013b4565b935b62001e1d62000250835190565b85101562001f025762001e35620016cc600b62001127565b63b6aed0cb62001e4a62001b6c888662001a91565b4292803b156200023f5762001e7687809462001e8262001e6960405190565b9788968795869460e01b90565b84526004840162001af0565b03925af180156200171a5762001ec89262001b8d9262001eb39262001ecf575b5062001b7362001b6c898762001a91565b62001ec062001ba7825190565b209462001a7b565b9362001e10565b62001ef390873d891162001efa575b62001eea8183620002c0565b81019062000233565b3862001ea2565b503d62001ede565b9150506200027291925062001f1b600191600d62000697565b62001d3e565b60405162461bcd60e51b815280620012176004820162001bd7565b620002509162001f4c9162001f56565b9092919262002111565b919060009262001f64825190565b62001f74620015e06041620013b4565b0362001fac5762001fa592935062001f8a600090565b506020820151906060604084015193015160001a906200200f565b9192909190565b50915062001fbb600062001182565b9062001fd162001fcb6002945190565b620013b4565b91929190565b6200025090620013b4565b62001b04620002729462001c9260609498979562002005608086019a6000870152565b60ff166020850152565b90916200201c8462001fd7565b6200204b620015e07f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0620013b4565b11620020c8579062002071602094600094936200206760405190565b9485948562001fe2565b838052039060015afa156200171a57600051600091620020918362001182565b6200209c8162000382565b620020a78462000382565b14620020b9575062001fd183620013b4565b915062001fd1600193620013b4565b505050620020d7600062001182565b9160039190565b634e487b7160e01b600052602160045260246000fd5b60041115620020ff57565b620020de565b906200027282620020f4565b6200211d600062002105565b620021288262002105565b0362002132575050565b6200213e600162002105565b620021498262002105565b036200217a576040517ff645eedf000000000000000000000000000000000000000000000000000000008152600490fd5b62002186600262002105565b620021918262002105565b03620021dc5762001217620021a68362001fd7565b6040519182917ffce698f70000000000000000000000000000000000000000000000000000000083526004830190815260200190565b620021f3620021ec600362002105565b9162002105565b14620021fc5750565b62001217906200220b60405190565b9182917fd78bce0c0000000000000000000000000000000000000000000000000000000083526004830190815260200190565b3562000250816200041c565b903590601e1936829003018212156200023f570180359067ffffffffffffffff82116200023f57602001913682900383136200023f57565b60208082526019908201527f656e636c6176654944206e6f7420612073657175656e63657200000000000000604082015260600190565b15620022c157565b60405162461bcd60e51b815280620012176004820162002282565b62002353935091506200230f9050620022f5826200223e565b62001dcb6200230860208501856200224a565b9062001ca7565b90620023416200233b62001bd16000946200233362001de962001bd1838962001cb4565b600162001cb4565b620022b9565b6200234c8162002595565b016200223e565b620015737fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a58916200029960405190565b9160001960089290920291821b911b620012c0565b921b90565b9190620023b262000250620012e693620013b4565b90835462002383565b62000272916000916200239d565b818110620023d5575050565b80620023e56000600193620023bb565b01620023c9565b9190601f8111620023fc57505050565b620024106200027293600052602060002090565b906020601f84018190048301931062002434575b6020601f909101040190620023c9565b909150819062002424565b919067ffffffffffffffff8211620002e357620024698262002462855462000d3a565b85620023ec565b600090601f8311600114620024a857620012e69291600091836200249c575b5050600019600883021c1916906002021790565b01359050388062002488565b601f19831691620024be85600052602060002090565b92815b818110620024ff57509160029391856001969410620024e4575b50505002019055565b0135600019601f84166008021c19165b9055388080620024db565b91936020600181928787013581550195019201620024c1565b906200027292916200243f565b62000272919062002574906040906002906200254d8162002546876200223e565b9062001d1a565b6200256b600182016200256460208801886200224a565b9162002518565b0192016200223e565b9062001601565b90620002729162002525565b9190820391821162001a8b57565b6040906200266781620026526006620025c583620025bf83620025b8836200223e565b9062000697565b6200257b565b62002607600262001b8d6200263762002613620025e2886200223e565b976200260d60018801996200260760038a019b620026008d62001810565b9062001952565b62001d1a565b6200223e565b6200262b43620026246001620013b4565b9062002587565b409062001b7e60405190565b6200264462001ba7825190565b209201620026008562001810565b62002574620026618262001810565b62001a7b565b0162002673816200223e565b62002687620015e062000250600562001810565b11620026905750565b6200164562000272916200223e565b60208082526022908201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60408201527f6564000000000000000000000000000000000000000000000000000000000000606082015260800190565b156200270457565b60405162461bcd60e51b81528062001217600482016200269f565b93505050506200273e6200273862001493600462001b13565b620026fc565b6200276f60016200275181600462001d3e565b620027638162001f1b85600062001cb4565b62001f1b838262001cb4565b620015737ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e760936916200085d60405190565b5062000250906020810190620003ae565b506200025090602081019062000423565b67ffffffffffffffff8116620003a6565b905035906200027282620027c1565b5062000250906020810190620027d2565b9060606200285b6200027293620028196200281160008301836200279f565b85906200081b565b620028376200282c60208301836200279f565b60208601906200081b565b620028516200284a6040830183620027b0565b6040860152565b82810190620027e1565b67ffffffffffffffff16910152565b9037565b8183529091602001917f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116200023f57829160206200031e92029384916200286a565b94939160a0916200027294620028e492620028d660c08a019360008b0190620027f2565b88830360808a01526200286e565b940152565b608081019291620002729190620027f2565b60208082526018908201527f7769746864726177616c20616c7265616479207370656e740000000000000000604082015260600190565b156200293a57565b60405162461bcd60e51b8152806200121760048201620028fb565b3562000250816200039b565b9160206200027292949362001b04604082019660008301906200081b565b929062002991620016cc600b62001127565b63b201246f92813b156200023f57600093620029cf620029c292620029b560405190565b9788968795869560e01b90565b85528a60048601620028b2565b03915afa80156200171a5762002af4575b50604051620029f9816020810162001b8d8582620028e9565b62002a0662001ba7825190565b209062002a6962002a1e62001bd1600c948562000697565b6000939062002a2e901562002932565b62001f1b60019162002a3f60405190565b62002a54816020810162001b8d8982620028e9565b62002a6162001ba7825190565b209062000697565b62002a79620016cc600a62001127565b906399a3ad219062002a9c604062002a946020840162002955565b92016200223e565b92803b156200023f5762002aba85809462002ac662001e6960405190565b84526004840162002961565b03925af180156200171a5762002ada575050565b816200027292903d1062001efa5762001eea8183620002c0565b62002b0790600062001eea8183620002c0565b38620029e0565b60208082526023908201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360408201527f7465640000000000000000000000000000000000000000000000000000000000606082015260800190565b1562002b7357565b60405162461bcd60e51b815280620012176004820162002b0e565b60601b90565b620002509062002b8e565b62002bae6200026e9162000382565b62002b94565b9162002bd760148462002bce620002509796839662002b9f565b01809262002b9f565b01906200076b565b6020808252602c908201527f63616c63756c61746564206164647265737320616e642061747465737465724960408201527f4420646f6e74206d617463680000000000000000000000000000000000000000606082015260800190565b1562002c4457565b60405162461bcd60e51b815280620012176004820162002bdf565b9162001f1b9262000272959460009562002c8862002c8262001bd1858a62001cb4565b62002b6b565b62002c9a575b50505060019262001cb4565b620011c862002cde62002cec9462002cd862002ce59462002cd262002cbe60405190565b809262001b8d60208301918d8c8462002bb4565b62002d64565b62001f3c565b9262000382565b1462002c3c565b38808062002c8e565b620002509291601a62002d2c9262002bd7817f19457468657265756d205369676e6564204d6573736167653a0a0000000000009052565b906200076b565b62002d579291620002729162002d4860405190565b94859260208401928362002cf5565b90810382520383620002c0565b62002d869062002d806200025062002d7a835190565b62002df3565b62002d33565b62002d9362001ba7825190565b2090565b369037565b906200027262002db762002db0846200195e565b9362000300565b601f19016020840162002d97565b6000190190565b634e487b7160e01b600052601260045260246000fd5b811562002ded570490565b62002dcc565b62002dfe8162002ea4565b9062002e116001926200031e84620013b4565b918062002e1e8462002d9c565b936020018401905b62002e32575b50505090565b62002e4162002e7d9162002dc5565b927f3031323334353637383961626364656600000000000000000000000000000000600a82061a845362002e76600a620013b4565b9062002de2565b908162002e8f620015e06000620013b4565b1462002e9e5790918162002e26565b62002e2c565b62002eb06000620013b4565b907a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000062002ed881620013b4565b82101562003064575b506d04ee2d6d415b85acef810000000062002efc81620013b4565b8210156200303b575b50662386f26fc1000062002f1981620013b4565b82101562003012575b506305f5e10062002f3381620013b4565b82101562002fe9575b5061271062002f4b81620013b4565b82101562002fc0575b50606462002f6281620013b4565b82101562002f97575b5062002f7c620015e0600a620013b4565b101562002f865790565b62000250906200031e6001620013b4565b62002fb89162002e7662002fab92620013b4565b916200031e6002620013b4565b903862002f6b565b62002fe19162002e7662002fd492620013b4565b916200031e6004620013b4565b903862002f54565b6200300a9162002e7662002ffd92620013b4565b916200031e6008620013b4565b903862002f3c565b620030339162002e766200302692620013b4565b916200031e6010620013b4565b903862002f22565b6200305c9162002e766200304f92620013b4565b916200031e6020620013b4565b903862002f05565b620030859162002e766200307892620013b4565b916200031e6040620013b4565b903862002ee1565b620002509060081c620006bb565b6200025090546200308d565b6200025060046200309b565b62001bd16200025091620030c5600090565b50600062001cb4565b62001bd16200025091620030e0600090565b50600162001cb4565b6200027290620030f8620011ad565b6200310d62001de962001bd183600062001cb4565b6200276f600162001f1b838262001cb4565b6200027290620030e9565b620002729062003139620011ad565b62003181565b91906008620012c09102916200239860ff841b90565b91906200316a62000250620012e69362001420565b9083546200313f565b620002729160009162003155565b620031ae6000620031a8836001620031a26200233b62001bd1848462001cb4565b62001cb4565b62003173565b620015737f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47916200085d60405190565b62000272906200312a565b620031f3620011ad565b6200027262003207620016cc600a62001127565b6336d2da9033823b156200023f57620032459262003239600080946200322c60405190565b9687958694859360e01b90565b83526004830162000826565b03925af180156200171a57620032585750565b6200027290600062001eea8183620002c0565b62000272620031e9565b90620002729162003285620011ad565b620033cd565b9062003295815190565b9067ffffffffffffffff8211620002e357620032b78262002462855462000d3a565b602090601f8311600114620032f557620012e6929160009183620032e9575050600019600883021c1916906002021790565b01519050388062002488565b601f198316916200330b85600052602060002090565b9260005b8181106200334657509160029391856001969410620033315750505002019055565b01516000196008601f8516021c1916620024f4565b919360206001819287870151815501950192016200330f565b919062000e3a5762000272916200328b565b9081549168010000000000000000831015620002e357826200339d916001620002729501815562000ce3565b906200335f565b92916020620033c46200027293604087019087820360008901526200099a565b9401906200081b565b906200341c8162003416846003620033f0620033ea8383620007c6565b62001127565b6200340a620011c862003404600062001182565b62000382565b146200345657620007c6565b620012ca565b7f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb591620015736200344c60405190565b92839283620033a4565b6200346382600262003371565b620007c6565b90620002729162003275565b90620007a3620003418362000432565b620002509062000e00565b906200349a825490565b620034a58162003475565b92620034ba6020850191600052602060002090565b6000915b838310620034cc5750505050565b600160208192620034dd8562003485565b815201920192019190620034be565b620002509062003490565b620002506002620034ec56fe6080604052346200002657620000146200002b565b604051611ae5620001c58239611ae590f35b600080fd5b6200003562000037565b565b62000035336200008d565b6200005562000052620000529290565b90565b6001600160a01b031690565b620000529062000042565b620000779062000055565b9052565b6020810192916200003591906200006c565b62000099600062000061565b620000a48162000055565b620000af8362000055565b14620000c15750620000359062000162565b620000e790620000d060405190565b631e4fbdf760e01b8152918291600483016200007b565b0390fd5b620000529062000055565b620000529054620000eb565b620000529062000055906001600160a01b031682565b620000529062000102565b620000529062000118565b9062000142620000526200015e9262000123565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200016e6000620000f6565b906200017c8160006200012e565b620001b3620001ac7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000123565b9162000123565b91620001be60405190565b600090a356fe6080604052600436101561001d575b366119cf5761001b611a3d565b005b60003560e01c80630fcfbd11146100fd5780630fe9188e146100f857806333a88c72146100f3578063346633fb146100ee57806336d2da90146100e9578063715018a6146100e45780638da5cb5b146100df5780639730886d146100da57806399a3ad21146100d5578063b1454caa146100d0578063b201246f146100cb578063b6aed0cb146100c6578063e138a8d2146100c15763f2fde38b0361000e57610560565b610544565b6104d4565b61049e565b6103e2565b610316565b6102fd565b610291565b610279565b610256565b61022e565b6101b6565b610199565b610140565b908160c09103126101105790565b600080fd5b9060208282031261011057813567ffffffffffffffff81116101105761013b9201610102565b90565b565b346101105761016b61015b610156366004610115565b61142d565b6040519182918290815260200190565b0390f35b805b0361011057565b9050359061013e8261016f565b906020828203126101105761013b91610178565b34610110576101b16101ac366004610185565b61091b565b604051005b346101105761016b6101d16101cc366004610115565b61138a565b60405191829182901515815260200190565b6001600160a01b031690565b6001600160a01b038116610171565b9050359061013e826101ef565b91906040838203126101105761013b9061022581856101fe565b93602001610178565b6101b161023c36600461020b565b90611084565b906020828203126101105761013b916101fe565b34610110576101b1610269366004610242565b6119c6565b600091031261011057565b346101105761028936600461026e565b6101b16105b0565b34610110576102a136600461026e565b61016b6102b66000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b91906040838203126101105782359067ffffffffffffffff8211610110576102258161013b938601610102565b34610110576101b16103103660046102d0565b90611996565b34610110576101b161032936600461020b565b906112c0565b63ffffffff8116610171565b9050359061013e8261032f565b909182601f830112156101105781359167ffffffffffffffff831161011057602001926001830284011161011057565b60ff8116610171565b9050359061013e82610378565b919091608081840312610110576103a5838261033b565b926103b3816020840161033b565b92604083013567ffffffffffffffff8111610110576103d78361013b928601610348565b939094606001610381565b346101105761016b6104016103f836600461038e565b93929092611331565b6040519182918267ffffffffffffffff909116815260200190565b908160809103126101105790565b909182601f830112156101105781359167ffffffffffffffff831161011057602001926020830284011161011057565b9060c0828203126101105761046f818361041c565b92608083013567ffffffffffffffff8111610110576104938361013b92860161042a565b93909460a001610178565b34610110576101b16104b136600461045a565b92919091610f8a565b91906040838203126101105761013b906102258185610178565b34610110576101b16104e73660046104ba565b90610876565b9060608282031261011057813567ffffffffffffffff81116101105781610515918401610102565b92602083013567ffffffffffffffff8111610110576105398361013b92860161042a565b939094604001610178565b34610110576101b16105573660046104ed565b92919091610c62565b34610110576101b1610573366004610242565b6106a1565b6105806105b8565b61013e61059e565b6101e361013b61013b9290565b61013b90610588565b61013e6105ab6000610595565b610702565b61013e610578565b60005433906001600160a01b03168190036105d05750565b61061a906105dd60405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b61013e9061062a6105b8565b6106346000610595565b6001600160a01b0381166001600160a01b03831614610657575061013e90610702565b61061a9061066460405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61013e9061061e565b906001600160a01b03905b9181191691161790565b6101e361013b61013b926001600160a01b031690565b61013b906106bf565b61013b906106d5565b906106f761013b6106fe926106de565b82546106aa565b9055565b6000546001600160a01b03169061071a8160006106e7565b61074d6107477f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936106de565b916106de565b9161075760405190565b80805b0390a3565b9061013e9161076c6105b8565b610836565b905b600052602052604060002090565b61013b9081565b61013b9054610781565b61013b61013b61013b9290565b0190565b156107aa57565b60405162461bcd60e51b815260206004820152602560248201527f526f6f7420616c726561647920616464656420746f20746865206d657373616760448201527f65206275730000000000000000000000000000000000000000000000000000006064820152608490fd5b90600019906106b5565b9061082f61013b6106fe92610792565b8254610815565b9061087161013e92600461086c6108556108508484610771565b610788565b6108666108626000610792565b9190565b146107a3565b610771565b61081f565b9061013e9161075f565b61013e9061088c6105b8565b6108dd565b1561089857565b60405162461bcd60e51b815260206004820152601a60248201527f537461746520726f6f7420646f6573206e6f742065786973742e0000000000006044820152606490fd5b61013e906108716004916109156108f76108508386610771565b61091060009161090961086284610792565b1415610891565b610792565b92610771565b61013e90610880565b1561092b57565b60405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201527f7373616765206275732e000000000000000000000000000000000000000000006064820152608490fd5b1561099d57565b60405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608490fd5b5061013b9060208101906101fe565b67ffffffffffffffff8116610171565b9050359061013e826109fb565b5061013b906020810190610a0b565b5061013b90602081019061033b565b9035601e19368390030181121561011057016020813591019167ffffffffffffffff82116101105736829003831361011057565b90826000939282370152565b9190610a9481610a8d8161079f9560209181520190565b8095610a6a565b601f01601f191690565b5061013b906020810190610381565b9061013b9060a0610b58610b4e60c08401610ad8610acb88806109ec565b6001600160a01b03168652565b610af9610ae86020890189610a18565b67ffffffffffffffff166020870152565b610b16610b096040890189610a27565b63ffffffff166040870152565b610b33610b266060890189610a27565b63ffffffff166060870152565b610b406080880188610a36565b908683036080880152610a76565b9482810190610a9e565b60ff16910152565b602080825261013b92910190610aad565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff821117610ba957604052565b610b71565b60408082526001908201527f6d000000000000000000000000000000000000000000000000000000000000006060820152919061013e90602060808501940152565b15610bf757565b60405162461bcd60e51b815260206004820152603060248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7360448201527f7320636861696e206d6573736167652e000000000000000000000000000000006064820152608490fd5b92610d469261013e94610caf6004610c94610c806108508784610771565b610c8d6108626000610792565b1415610924565b610ca861086261013b610850884295610771565b1015610996565b610cd7610cbb60405190565b8092610ccb602083019182610b60565b90810382520382610b87565b610ce9610ce2825190565b9160200190565b20610d06610cf660405190565b8092610ccb602083019182610bae565b610d11610ce2825190565b20610d34610d1e60405190565b8092610ccb60208301918261079f816020939052565b610d3f610ce2825190565b2092610d4b565b610bf0565b610d6a929361086292610d6692610d60600090565b50610dcd565b9290565b1490565b634e487b7160e01b600052601160045260246000fd5b6000198114610d935760010190565b610d6e565b634e487b7160e01b600052603260045260246000fd5b9190811015610dbe576020020190565b610d98565b3561013b8161016f565b610dd76000610792565b925b82841015610e0d57610e01610e0791610dfb610df6878787610dae565b610dc3565b90610e14565b93610d84565b92610dd9565b9250505090565b81811015610e2f579061013b91600052602052604060002090565b61013b91600052602052604060002090565b5061013b906020810190610178565b906060610eb761013e93610e77610e6a60008301836109ec565b6001600160a01b03168552565b610e97610e8760208301836109ec565b6001600160a01b03166020860152565b610eae610ea76040830183610e41565b6040860152565b82810190610a18565b67ffffffffffffffff16910152565b60808101929161013e9190610e50565b60408082526001908201527f76000000000000000000000000000000000000000000000000000000000000006060820152919061013e90602060808501940152565b15610f1f57565b60405162461bcd60e51b815260206004820152603360248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7560448201527f65207472616e73666572206d6573736167652e000000000000000000000000006064820152608490fd5b92610fec9261013e94610fa86004610c94610c806108508784610771565b610fc4610fb460405190565b8092610ccb602083019182610ec6565b610fcf610ce2825190565b20610d06610fdc60405190565b8092610ccb602083019182610ed6565b610f18565b15610ff857565b60405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e67204574686572000000000000000000000000000000006064820152608490fd5b90815260408101929161013e916020905b019067ffffffffffffffff169052565b6110a234926110936000610792565b841190816110f5575b50610ff1565b336110ac81611191565b6110df6110d97f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6936106de565b936106de565b9361075a6110ec60405190565b92839283611063565b905083143861109c565b90610773906106de565b61013b905b67ffffffffffffffff1690565b61013b9054611109565b61110e61013b61013b9290565b67ffffffffffffffff9081169116019067ffffffffffffffff8211610d9357565b9067ffffffffffffffff906106b5565b61110e61013b61013b9267ffffffffffffffff1690565b9061118a61013b6106fe92611163565b8254611153565b9061013e60036111cf6111c06111af6111aa87856110ff565b61111b565b956111ba6001611125565b936110ff565b916111ca8361111b565b611132565b9061117a565b9061013e916111e26105b8565b61129a565b9061013e6111f460405190565b9283610b87565b67ffffffffffffffff8111610ba957602090601f01601f19160190565b9061122a611225836111fb565b6111e7565b918252565b3d156112495761123e3d611218565b903d6000602084013e565b606090565b1561125557565b60405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606490fd5b6000809161013e936112ab60405190565b90818003925af16112ba61122f565b5061124e565b9061013e916111d5565b97969461131a60a09561130d6113279661130061013e9b969760208f61107460c082019b60008301906001600160a01b03169052565b63ffffffff1660408d0152565b63ffffffff1660608b0152565b88830360808a0152610a76565b94019060ff169052565b9290919361138490611341600090565b50339261134d84611191565b9687957fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef7759379761137b60405190565b978897886112ca565b0390a190565b6108506113b991611399600090565b506113a6610cbb60405190565b6113b1610ce2825190565b206001610771565b6113c36000610792565b811190816113cf575090565b429150111590565b156113de57565b60405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d69747465646044820152601760f91b6064820152608490fd5b61085061143c91611399600090565b61013b6114496000610792565b82116113d7565b9061013e9161145d6105b8565b6118ff565b91908201809211610d9357565b1561147657565b60405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b3561013b816101ef565b3561013b8161032f565b61150861013b61013b9263ffffffff1690565b63ffffffff1690565b90610773906114f5565b8054821015610dbe57611535600491600052602060002090565b91020190600090565b634e487b7160e01b600052600060045260246000fd5b3561013b816109fb565b907bffffffffffffffff00000000000000000000000000000000000000009060a01b6106b5565b9061159561013b6106fe92611163565b825461155e565b907fffffffff000000000000000000000000000000000000000000000000000000009060e01b6106b5565b906115d761013b6106fe926114f5565b825461159c565b9063ffffffff906106b5565b906115fa61013b6106fe926114f5565b82546115de565b903590601e193682900301821215610110570180359067ffffffffffffffff8211610110576020019136829003831361011057565b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561166c575b602083101461166757565b611636565b91607f169161165c565b9160001960089290920291821b911b6106b5565b919061169b61013b6106fe93610792565b908354611676565b61013e9160009161168a565b8181106116ba575050565b806116c860006001936116a3565b016116af565b9190601f81116116dd57505050565b6116ef61013e93600052602060002090565b906020601f840181900483019310611711575b6020601f9091010401906116af565b9091508190611702565b919067ffffffffffffffff8211610ba9576117408261173a855461164c565b856116ce565b600090601f831160011461177b576106fe929160009183611770575b5050600019600883021c1916906002021790565b01359050388061175c565b601f1983169161179085600052602060002090565b92815b8181106117cd575091600293918560019694106117b4575b50505002019055565b0135600019601f84166008021c191690553880806117ab565b91936020600181928787013581550195019201611793565b9061013e929161171b565b3561013b81610378565b9060ff906106b5565b61181361013b61013b9260ff1690565b60ff1690565b9061182961013b6106fe92611803565b82546117fa565b61013e91906118b79060a09060039061187c8161185561184f886114e1565b826106e7565b61186a61186460208901611554565b82611585565b611876604088016114eb565b906115c7565b6118956001820161188f606088016114eb565b906115ea565b6118af600282016118a96080880188611601565b916117e5565b0192016117f0565b90611819565b91906118cc5761013e91611830565b61153e565b9081549168010000000000000000831015610ba957826118f991600161013e9501815561151b565b906118bd565b61199161013b61197f61191561013e9542611462565b61196c61192160405190565b6119338160208101610ccb8a82610b60565b61193e610ce2825190565b20916108716001936119536108508287610771565b9461086c60009661196661086289610792565b1461146f565b61197960029186016114e1565b906110ff565b61198b606085016114eb565b90611511565b6118d1565b9061013e91611450565b61013e906119ac6105b8565b60008061013e926119bc306106de565b316112ab60405190565b61013e906119a0565b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f727465640000000000000000000000000000000000000000006044820152606490fd5b6001600160a01b03909116815260408101929161013e9160200152565b6040513d6000823e3d90fd5b611a46306106de565b63346633fb34913390803b1561011057611a7684600094611a81611a6960405190565b9788968795869460e01b90565b845260048401611a14565b03925af18015611aaa57611a925750565b61013e906000611aa28183610b87565b81019061026e565b611a3156fea2646970667358221220f1d785fdbb2d651555a3e150a57286c72acedb6ae4e42ca19d2777f4fbfc83b664736f6c63430008140033a2646970667358221220a0f159cc8662db784b797a62a85a315050fcfe3fb5b3d3d23b0688aaa8598fc364736f6c63430008140033", } // ManagementContractABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/Math/Math.go b/contracts/generated/Math/Math.go index b980ff062d..67c17f203f 100644 --- a/contracts/generated/Math/Math.go +++ b/contracts/generated/Math/Math.go @@ -32,7 +32,7 @@ var ( // MathMetaData contains all meta data concerning the Math contract. var MathMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"MathOverflowedMulDiv\",\"type\":\"error\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220eab814cfea946e022b97d24a219db99dc611af91d817f34a73287c7c8f7c44b064736f6c63430008140033", + Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea2646970667358221220bdd5bf975486d3655ac7d6ea3a223a2454098c34fb07eb9098d1304bc7c4917664736f6c63430008140033", } // MathABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/MerkleProof/MerkleProof.go b/contracts/generated/MerkleProof/MerkleProof.go index 1e4bc35217..342676b4bf 100644 --- a/contracts/generated/MerkleProof/MerkleProof.go +++ b/contracts/generated/MerkleProof/MerkleProof.go @@ -32,7 +32,7 @@ var ( // MerkleProofMetaData contains all meta data concerning the MerkleProof contract. var MerkleProofMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"MerkleProofInvalidMultiproof\",\"type\":\"error\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b33e594f2c1a0316504d4bef0deef084cf65757f4be5c116c7ceb3e6ab03528b64736f6c63430008140033", + Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea26469706673582212200e92957113486a6da1e9c617616e23fd590c60b12d8acde1767e2e4f3b9111f864736f6c63430008140033", } // MerkleProofABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go index 78dd67ec70..046c47ca1f 100644 --- a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go +++ b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go @@ -50,7 +50,7 @@ type StructsValueTransferMessage struct { // MerkleTreeMessageBusMetaData contains all meta data concerning the MerkleTreeMessageBus contract. var MerkleTreeMessageBusMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"LogMessagePublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"name\":\"ValueTransfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"activationTime\",\"type\":\"uint256\"}],\"name\":\"addStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"name\":\"disableStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"getMessageTimeOfFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"publishMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveValueFromL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"retrieveAllFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendValueToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"finalAfterTimestamp\",\"type\":\"uint256\"}],\"name\":\"storeCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"verifyMessageFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyMessageInclusion\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyValueTransferInclusion\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61180f806100a56000396000f3fe6080604052600436106100e15760003560e01c80639730886d1161007f578063b201246f11610059578063b201246f1461030e578063b6aed0cb1461032e578063e138a8d21461034e578063f2fde38b1461036e57610155565b80639730886d1461029557806399a3ad21146102b5578063b1454caa146102d557610155565b8063346633fb116100bb578063346633fb1461022557806336d2da9014610238578063715018a6146102585780638da5cb5b1461026d57610155565b80630fcfbd11146101a25780630fe9188e146101d557806333a88c72146101f557610155565b36610155576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561013f57600080fd5b505af1158015610153573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b3480156101ae57600080fd5b506101c26101bd366004610f78565b61038e565b6040519081526020015b60405180910390f35b3480156101e157600080fd5b506101536101f0366004610fad565b610428565b34801561020157600080fd5b50610215610210366004610f78565b61049e565b60405190151581526020016101cc565b610153610233366004610fdb565b6104f1565b34801561024457600080fd5b50610153610253366004611007565b6105d4565b34801561026457600080fd5b50610153610683565b34801561027957600080fd5b506000546040516001600160a01b0390911681526020016101cc565b3480156102a157600080fd5b506101536102b0366004611024565b610697565b3480156102c157600080fd5b506101536102d0366004610fdb565b6107e9565b3480156102e157600080fd5b506102f56102f036600461109a565b610899565b60405167ffffffffffffffff90911681526020016101cc565b34801561031a57600080fd5b50610153610329366004611193565b6108f2565b34801561033a57600080fd5b506101536103493660046111f5565b610af4565b34801561035a57600080fd5b50610153610369366004611217565b610b90565b34801561037a57600080fd5b50610153610389366004611007565b610d70565b600080826040516020016103a291906112c6565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806104215760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d69747465646044820152601760f91b6064820152608401610199565b9392505050565b610430610dc7565b600081815260046020526040812054900361048d5760405162461bcd60e51b815260206004820152601a60248201527f537461746520726f6f7420646f6573206e6f742065786973742e0000000000006044820152606401610199565b600090815260046020526040812055565b600080826040516020016104b291906112c6565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906104e95750428111155b949350505050565b60003411801561050057508034145b6105725760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e67204574686572000000000000000000000000000000006064820152608401610199565b600061057d33610e0d565b6040805134815267ffffffffffffffff831660208201529192506001600160a01b0385169133917f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6910160405180910390a3505050565b6105dc610dc7565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610629576040519150601f19603f3d011682016040523d82523d6000602084013e61062e565b606091505b505090508061067f5760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606401610199565b5050565b61068b610dc7565b6106956000610e6b565b565b61069f610dc7565b60006106ab82426113c7565b90506000836040516020016106c091906112c6565b60408051601f198184030181529181528151602092830120600081815260019093529120549091501561075b5760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608401610199565b600081815260016020908152604082208490556002919061077e90870187611007565b6001600160a01b0316815260208101919091526040016000908120906107aa60808701606088016113da565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016107e182826115a8565b505050505050565b6107f1610dc7565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461083e576040519150601f19603f3d011682016040523d82523d6000602084013e610843565b606091505b50509050806108945760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606401610199565b505050565b60006108a433610e0d565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516108e197969594939291906116c2565b60405180910390a195945050505050565b60008181526004602052604081205490036109625760405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201526939b9b0b3b290313ab99760b11b6064820152608401610199565b6000818152600460205260409020544210156109ca5760405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608401610199565b6000846040516020016109dd9190611722565b60408051601f198184030181528282528051602091820120908301829052600160608401527f760000000000000000000000000000000000000000000000000000000000000060808401529082015260a001604051602081830303815290604052805190602001209050610a7b84848484604051602001610a6091815260200190565b60405160208183030381529060405280519060200120610ec8565b610aed5760405162461bcd60e51b815260206004820152603360248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7560448201527f65207472616e73666572206d6573736167652e000000000000000000000000006064820152608401610199565b5050505050565b610afc610dc7565b60008281526004602052604090205415610b7e5760405162461bcd60e51b815260206004820152602560248201527f526f6f7420616c726561647920616464656420746f20746865206d657373616760448201527f65206275730000000000000000000000000000000000000000000000000000006064820152608401610199565b60009182526004602052604090912055565b6000818152600460205260408120549003610c005760405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201526939b9b0b3b290313ab99760b11b6064820152608401610199565b600081815260046020526040902054421015610c685760405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608401610199565b600084604051602001610c7b91906112c6565b60408051601f198184030181528282528051602091820120908301829052600160608401527f6d0000000000000000000000000000000000000000000000000000000000000060808401529082015260a001604051602081830303815290604052805190602001209050610cfe84848484604051602001610a6091815260200190565b610aed5760405162461bcd60e51b815260206004820152603060248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7360448201527f7320636861696e206d6573736167652e000000000000000000000000000000006064820152608401610199565b610d78610dc7565b6001600160a01b038116610dbb576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610199565b610dc481610e6b565b50565b6000546001600160a01b03163314610695576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610199565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff169160019190610e408385611782565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082610ed6868685610ee0565b1495945050505050565b600081815b84811015610f2357610f0f82878784818110610f0357610f036117aa565b90506020020135610f2c565b915080610f1b816117c0565b915050610ee5565b50949350505050565b6000818310610f48576000828152602084905260409020610f57565b60008381526020839052604090205b90505b92915050565b600060c08284031215610f7257600080fd5b50919050565b600060208284031215610f8a57600080fd5b813567ffffffffffffffff811115610fa157600080fd5b6104e984828501610f60565b600060208284031215610fbf57600080fd5b5035919050565b6001600160a01b0381168114610dc457600080fd5b60008060408385031215610fee57600080fd5b8235610ff981610fc6565b946020939093013593505050565b60006020828403121561101957600080fd5b813561042181610fc6565b6000806040838503121561103757600080fd5b823567ffffffffffffffff81111561104e57600080fd5b61105a85828601610f60565b95602094909401359450505050565b63ffffffff81168114610dc457600080fd5b60ff81168114610dc457600080fd5b80356110958161107b565b919050565b6000806000806000608086880312156110b257600080fd5b85356110bd81611069565b945060208601356110cd81611069565b9350604086013567ffffffffffffffff808211156110ea57600080fd5b818801915088601f8301126110fe57600080fd5b81358181111561110d57600080fd5b89602082850101111561111f57600080fd5b60208301955080945050505060608601356111398161107b565b809150509295509295909350565b60008083601f84011261115957600080fd5b50813567ffffffffffffffff81111561117157600080fd5b6020830191508360208260051b850101111561118c57600080fd5b9250929050565b60008060008084860360c08112156111aa57600080fd5b60808112156111b857600080fd5b50849350608085013567ffffffffffffffff8111156111d657600080fd5b6111e287828801611147565b9598909750949560a00135949350505050565b6000806040838503121561120857600080fd5b50508035926020909101359150565b6000806000806060858703121561122d57600080fd5b843567ffffffffffffffff8082111561124557600080fd5b61125188838901610f60565b9550602087013591508082111561126757600080fd5b5061127487828801611147565b9598909750949560400135949350505050565b67ffffffffffffffff81168114610dc457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600082356112d781610fc6565b6001600160a01b03811660208401525060208301356112f581611287565b67ffffffffffffffff80821660408501526040850135915061131682611069565b63ffffffff80831660608601526060860135925061133383611069565b80831660808601525060808501359150601e1985360301821261135557600080fd5b602091850191820191358181111561136c57600080fd5b80360383131561137b57600080fd5b60c060a086015261139060e08601828561129d565b925050506113a060a0850161108a565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f5a57610f5a6113b1565b6000602082840312156113ec57600080fd5b813561042181611069565b60008135610f5a81611069565b6000808335601e1984360301811261141b57600080fd5b83018035915067ffffffffffffffff82111561143657600080fd5b60200191503681900382131561118c57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061147557607f821691505b602082108103610f7257634e487b7160e01b600052602260045260246000fd5b601f82111561089457600081815260208120601f850160051c810160208610156114bc5750805b601f850160051c820191505b818110156107e1578281556001016114c8565b67ffffffffffffffff8311156114f3576114f361144b565b611507836115018354611461565b83611495565b6000601f84116001811461153b57600085156115235750838201355b600019600387901b1c1916600186901b178355610aed565b600083815260209020601f19861690835b8281101561156c578685013582556020948501946001909201910161154c565b50868210156115895760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008135610f5a8161107b565b81356115b381610fc6565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff19821617835560208401356115eb81611287565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff000000000000000000000000000000000000000000000000000000008184828516171785556040860135925061164983611069565b921760e09190911b909116178155611681611666606084016113f7565b6001830163ffffffff821663ffffffff198254161781555050565b61168e6080830183611404565b61169c8183600286016114db565b505061067f6116ad60a0840161159b565b6003830160ff821660ff198254161781555050565b6001600160a01b038816815267ffffffffffffffff87166020820152600063ffffffff808816604084015280871660608401525060c0608083015261170b60c08301858761129d565b905060ff831660a083015298975050505050505050565b60808101823561173181610fc6565b6001600160a01b03908116835260208401359061174d82610fc6565b16602083015260408381013590830152606083013561176b81611287565b67ffffffffffffffff811660608401525092915050565b67ffffffffffffffff8181168382160190808211156117a3576117a36113b1565b5092915050565b634e487b7160e01b600052603260045260246000fd5b6000600182016117d2576117d26113b1565b506001019056fea264697066735822122078bebc469f5cbd8c097a1657385a1d8552a3feee7913c0a4f7f5badba2928b8764736f6c63430008140033", + Bin: "0x6080604052346200002657620000146200002b565b604051611ae5620001c58239611ae590f35b600080fd5b6200003562000037565b565b62000035336200008d565b6200005562000052620000529290565b90565b6001600160a01b031690565b620000529062000042565b620000779062000055565b9052565b6020810192916200003591906200006c565b62000099600062000061565b620000a48162000055565b620000af8362000055565b14620000c15750620000359062000162565b620000e790620000d060405190565b631e4fbdf760e01b8152918291600483016200007b565b0390fd5b620000529062000055565b620000529054620000eb565b620000529062000055906001600160a01b031682565b620000529062000102565b620000529062000118565b9062000142620000526200015e9262000123565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200016e6000620000f6565b906200017c8160006200012e565b620001b3620001ac7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000123565b9162000123565b91620001be60405190565b600090a356fe6080604052600436101561001d575b366119cf5761001b611a3d565b005b60003560e01c80630fcfbd11146100fd5780630fe9188e146100f857806333a88c72146100f3578063346633fb146100ee57806336d2da90146100e9578063715018a6146100e45780638da5cb5b146100df5780639730886d146100da57806399a3ad21146100d5578063b1454caa146100d0578063b201246f146100cb578063b6aed0cb146100c6578063e138a8d2146100c15763f2fde38b0361000e57610560565b610544565b6104d4565b61049e565b6103e2565b610316565b6102fd565b610291565b610279565b610256565b61022e565b6101b6565b610199565b610140565b908160c09103126101105790565b600080fd5b9060208282031261011057813567ffffffffffffffff81116101105761013b9201610102565b90565b565b346101105761016b61015b610156366004610115565b61142d565b6040519182918290815260200190565b0390f35b805b0361011057565b9050359061013e8261016f565b906020828203126101105761013b91610178565b34610110576101b16101ac366004610185565b61091b565b604051005b346101105761016b6101d16101cc366004610115565b61138a565b60405191829182901515815260200190565b6001600160a01b031690565b6001600160a01b038116610171565b9050359061013e826101ef565b91906040838203126101105761013b9061022581856101fe565b93602001610178565b6101b161023c36600461020b565b90611084565b906020828203126101105761013b916101fe565b34610110576101b1610269366004610242565b6119c6565b600091031261011057565b346101105761028936600461026e565b6101b16105b0565b34610110576102a136600461026e565b61016b6102b66000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b91906040838203126101105782359067ffffffffffffffff8211610110576102258161013b938601610102565b34610110576101b16103103660046102d0565b90611996565b34610110576101b161032936600461020b565b906112c0565b63ffffffff8116610171565b9050359061013e8261032f565b909182601f830112156101105781359167ffffffffffffffff831161011057602001926001830284011161011057565b60ff8116610171565b9050359061013e82610378565b919091608081840312610110576103a5838261033b565b926103b3816020840161033b565b92604083013567ffffffffffffffff8111610110576103d78361013b928601610348565b939094606001610381565b346101105761016b6104016103f836600461038e565b93929092611331565b6040519182918267ffffffffffffffff909116815260200190565b908160809103126101105790565b909182601f830112156101105781359167ffffffffffffffff831161011057602001926020830284011161011057565b9060c0828203126101105761046f818361041c565b92608083013567ffffffffffffffff8111610110576104938361013b92860161042a565b93909460a001610178565b34610110576101b16104b136600461045a565b92919091610f8a565b91906040838203126101105761013b906102258185610178565b34610110576101b16104e73660046104ba565b90610876565b9060608282031261011057813567ffffffffffffffff81116101105781610515918401610102565b92602083013567ffffffffffffffff8111610110576105398361013b92860161042a565b939094604001610178565b34610110576101b16105573660046104ed565b92919091610c62565b34610110576101b1610573366004610242565b6106a1565b6105806105b8565b61013e61059e565b6101e361013b61013b9290565b61013b90610588565b61013e6105ab6000610595565b610702565b61013e610578565b60005433906001600160a01b03168190036105d05750565b61061a906105dd60405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b61013e9061062a6105b8565b6106346000610595565b6001600160a01b0381166001600160a01b03831614610657575061013e90610702565b61061a9061066460405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61013e9061061e565b906001600160a01b03905b9181191691161790565b6101e361013b61013b926001600160a01b031690565b61013b906106bf565b61013b906106d5565b906106f761013b6106fe926106de565b82546106aa565b9055565b6000546001600160a01b03169061071a8160006106e7565b61074d6107477f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936106de565b916106de565b9161075760405190565b80805b0390a3565b9061013e9161076c6105b8565b610836565b905b600052602052604060002090565b61013b9081565b61013b9054610781565b61013b61013b61013b9290565b0190565b156107aa57565b60405162461bcd60e51b815260206004820152602560248201527f526f6f7420616c726561647920616464656420746f20746865206d657373616760448201527f65206275730000000000000000000000000000000000000000000000000000006064820152608490fd5b90600019906106b5565b9061082f61013b6106fe92610792565b8254610815565b9061087161013e92600461086c6108556108508484610771565b610788565b6108666108626000610792565b9190565b146107a3565b610771565b61081f565b9061013e9161075f565b61013e9061088c6105b8565b6108dd565b1561089857565b60405162461bcd60e51b815260206004820152601a60248201527f537461746520726f6f7420646f6573206e6f742065786973742e0000000000006044820152606490fd5b61013e906108716004916109156108f76108508386610771565b61091060009161090961086284610792565b1415610891565b610792565b92610771565b61013e90610880565b1561092b57565b60405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201527f7373616765206275732e000000000000000000000000000000000000000000006064820152608490fd5b1561099d57565b60405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608490fd5b5061013b9060208101906101fe565b67ffffffffffffffff8116610171565b9050359061013e826109fb565b5061013b906020810190610a0b565b5061013b90602081019061033b565b9035601e19368390030181121561011057016020813591019167ffffffffffffffff82116101105736829003831361011057565b90826000939282370152565b9190610a9481610a8d8161079f9560209181520190565b8095610a6a565b601f01601f191690565b5061013b906020810190610381565b9061013b9060a0610b58610b4e60c08401610ad8610acb88806109ec565b6001600160a01b03168652565b610af9610ae86020890189610a18565b67ffffffffffffffff166020870152565b610b16610b096040890189610a27565b63ffffffff166040870152565b610b33610b266060890189610a27565b63ffffffff166060870152565b610b406080880188610a36565b908683036080880152610a76565b9482810190610a9e565b60ff16910152565b602080825261013b92910190610aad565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff821117610ba957604052565b610b71565b60408082526001908201527f6d000000000000000000000000000000000000000000000000000000000000006060820152919061013e90602060808501940152565b15610bf757565b60405162461bcd60e51b815260206004820152603060248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7360448201527f7320636861696e206d6573736167652e000000000000000000000000000000006064820152608490fd5b92610d469261013e94610caf6004610c94610c806108508784610771565b610c8d6108626000610792565b1415610924565b610ca861086261013b610850884295610771565b1015610996565b610cd7610cbb60405190565b8092610ccb602083019182610b60565b90810382520382610b87565b610ce9610ce2825190565b9160200190565b20610d06610cf660405190565b8092610ccb602083019182610bae565b610d11610ce2825190565b20610d34610d1e60405190565b8092610ccb60208301918261079f816020939052565b610d3f610ce2825190565b2092610d4b565b610bf0565b610d6a929361086292610d6692610d60600090565b50610dcd565b9290565b1490565b634e487b7160e01b600052601160045260246000fd5b6000198114610d935760010190565b610d6e565b634e487b7160e01b600052603260045260246000fd5b9190811015610dbe576020020190565b610d98565b3561013b8161016f565b610dd76000610792565b925b82841015610e0d57610e01610e0791610dfb610df6878787610dae565b610dc3565b90610e14565b93610d84565b92610dd9565b9250505090565b81811015610e2f579061013b91600052602052604060002090565b61013b91600052602052604060002090565b5061013b906020810190610178565b906060610eb761013e93610e77610e6a60008301836109ec565b6001600160a01b03168552565b610e97610e8760208301836109ec565b6001600160a01b03166020860152565b610eae610ea76040830183610e41565b6040860152565b82810190610a18565b67ffffffffffffffff16910152565b60808101929161013e9190610e50565b60408082526001908201527f76000000000000000000000000000000000000000000000000000000000000006060820152919061013e90602060808501940152565b15610f1f57565b60405162461bcd60e51b815260206004820152603360248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7560448201527f65207472616e73666572206d6573736167652e000000000000000000000000006064820152608490fd5b92610fec9261013e94610fa86004610c94610c806108508784610771565b610fc4610fb460405190565b8092610ccb602083019182610ec6565b610fcf610ce2825190565b20610d06610fdc60405190565b8092610ccb602083019182610ed6565b610f18565b15610ff857565b60405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e67204574686572000000000000000000000000000000006064820152608490fd5b90815260408101929161013e916020905b019067ffffffffffffffff169052565b6110a234926110936000610792565b841190816110f5575b50610ff1565b336110ac81611191565b6110df6110d97f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6936106de565b936106de565b9361075a6110ec60405190565b92839283611063565b905083143861109c565b90610773906106de565b61013b905b67ffffffffffffffff1690565b61013b9054611109565b61110e61013b61013b9290565b67ffffffffffffffff9081169116019067ffffffffffffffff8211610d9357565b9067ffffffffffffffff906106b5565b61110e61013b61013b9267ffffffffffffffff1690565b9061118a61013b6106fe92611163565b8254611153565b9061013e60036111cf6111c06111af6111aa87856110ff565b61111b565b956111ba6001611125565b936110ff565b916111ca8361111b565b611132565b9061117a565b9061013e916111e26105b8565b61129a565b9061013e6111f460405190565b9283610b87565b67ffffffffffffffff8111610ba957602090601f01601f19160190565b9061122a611225836111fb565b6111e7565b918252565b3d156112495761123e3d611218565b903d6000602084013e565b606090565b1561125557565b60405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606490fd5b6000809161013e936112ab60405190565b90818003925af16112ba61122f565b5061124e565b9061013e916111d5565b97969461131a60a09561130d6113279661130061013e9b969760208f61107460c082019b60008301906001600160a01b03169052565b63ffffffff1660408d0152565b63ffffffff1660608b0152565b88830360808a0152610a76565b94019060ff169052565b9290919361138490611341600090565b50339261134d84611191565b9687957fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef7759379761137b60405190565b978897886112ca565b0390a190565b6108506113b991611399600090565b506113a6610cbb60405190565b6113b1610ce2825190565b206001610771565b6113c36000610792565b811190816113cf575090565b429150111590565b156113de57565b60405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d69747465646044820152601760f91b6064820152608490fd5b61085061143c91611399600090565b61013b6114496000610792565b82116113d7565b9061013e9161145d6105b8565b6118ff565b91908201809211610d9357565b1561147657565b60405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b3561013b816101ef565b3561013b8161032f565b61150861013b61013b9263ffffffff1690565b63ffffffff1690565b90610773906114f5565b8054821015610dbe57611535600491600052602060002090565b91020190600090565b634e487b7160e01b600052600060045260246000fd5b3561013b816109fb565b907bffffffffffffffff00000000000000000000000000000000000000009060a01b6106b5565b9061159561013b6106fe92611163565b825461155e565b907fffffffff000000000000000000000000000000000000000000000000000000009060e01b6106b5565b906115d761013b6106fe926114f5565b825461159c565b9063ffffffff906106b5565b906115fa61013b6106fe926114f5565b82546115de565b903590601e193682900301821215610110570180359067ffffffffffffffff8211610110576020019136829003831361011057565b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561166c575b602083101461166757565b611636565b91607f169161165c565b9160001960089290920291821b911b6106b5565b919061169b61013b6106fe93610792565b908354611676565b61013e9160009161168a565b8181106116ba575050565b806116c860006001936116a3565b016116af565b9190601f81116116dd57505050565b6116ef61013e93600052602060002090565b906020601f840181900483019310611711575b6020601f9091010401906116af565b9091508190611702565b919067ffffffffffffffff8211610ba9576117408261173a855461164c565b856116ce565b600090601f831160011461177b576106fe929160009183611770575b5050600019600883021c1916906002021790565b01359050388061175c565b601f1983169161179085600052602060002090565b92815b8181106117cd575091600293918560019694106117b4575b50505002019055565b0135600019601f84166008021c191690553880806117ab565b91936020600181928787013581550195019201611793565b9061013e929161171b565b3561013b81610378565b9060ff906106b5565b61181361013b61013b9260ff1690565b60ff1690565b9061182961013b6106fe92611803565b82546117fa565b61013e91906118b79060a09060039061187c8161185561184f886114e1565b826106e7565b61186a61186460208901611554565b82611585565b611876604088016114eb565b906115c7565b6118956001820161188f606088016114eb565b906115ea565b6118af600282016118a96080880188611601565b916117e5565b0192016117f0565b90611819565b91906118cc5761013e91611830565b61153e565b9081549168010000000000000000831015610ba957826118f991600161013e9501815561151b565b906118bd565b61199161013b61197f61191561013e9542611462565b61196c61192160405190565b6119338160208101610ccb8a82610b60565b61193e610ce2825190565b20916108716001936119536108508287610771565b9461086c60009661196661086289610792565b1461146f565b61197960029186016114e1565b906110ff565b61198b606085016114eb565b90611511565b6118d1565b9061013e91611450565b61013e906119ac6105b8565b60008061013e926119bc306106de565b316112ab60405190565b61013e906119a0565b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f727465640000000000000000000000000000000000000000006044820152606490fd5b6001600160a01b03909116815260408101929161013e9160200152565b6040513d6000823e3d90fd5b611a46306106de565b63346633fb34913390803b1561011057611a7684600094611a81611a6960405190565b9788968795869460e01b90565b845260048401611a14565b03925af18015611aaa57611a925750565b61013e906000611aa28183610b87565b81019061026e565b611a3156fea2646970667358221220f1d785fdbb2d651555a3e150a57286c72acedb6ae4e42ca19d2777f4fbfc83b664736f6c63430008140033", } // MerkleTreeMessageBusABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/MessageBus/MessageBus.go b/contracts/generated/MessageBus/MessageBus.go index b1cf6a2434..ff1956c2da 100644 --- a/contracts/generated/MessageBus/MessageBus.go +++ b/contracts/generated/MessageBus/MessageBus.go @@ -42,7 +42,7 @@ type StructsCrossChainMessage struct { // MessageBusMetaData contains all meta data concerning the MessageBus contract. var MessageBusMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"LogMessagePublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"name\":\"ValueTransfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"getMessageTimeOfFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"publishMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveValueFromL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"retrieveAllFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendValueToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"finalAfterTimestamp\",\"type\":\"uint256\"}],\"name\":\"storeCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"verifyMessageFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611019806100a56000396000f3fe6080604052600436106100b55760003560e01c80638da5cb5b1161006957806399a3ad211161004e57806399a3ad2114610269578063b1454caa14610289578063f2fde38b146102c257610129565b80638da5cb5b146102215780639730886d1461024957610129565b8063346633fb1161009a578063346633fb146101d957806336d2da90146101ec578063715018a61461020c57610129565b80630fcfbd111461017657806333a88c72146101a957610129565b36610129576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561011357600080fd5b505af1158015610127573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b34801561018257600080fd5b5061019661019136600461095c565b6102e2565b6040519081526020015b60405180910390f35b3480156101b557600080fd5b506101c96101c436600461095c565b610398565b60405190151581526020016101a0565b6101276101e73660046109a6565b6103eb565b3480156101f857600080fd5b506101276102073660046109d2565b6104ce565b34801561021857600080fd5b5061012761057d565b34801561022d57600080fd5b506000546040516001600160a01b0390911681526020016101a0565b34801561025557600080fd5b506101276102643660046109ef565b610591565b34801561027557600080fd5b506101276102843660046109a6565b6106e3565b34801561029557600080fd5b506102a96102a4366004610a65565b610793565b60405167ffffffffffffffff90911681526020016101a0565b3480156102ce57600080fd5b506101276102dd3660046109d2565b6107ec565b600080826040516020016102f69190610b51565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806103915760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d697474656460448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b9392505050565b600080826040516020016103ac9190610b51565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906103e35750428111155b949350505050565b6000341180156103fa57508034145b61046c5760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e6720457468657200000000000000000000000000000000606482015260840161016d565b600061047733610843565b6040805134815267ffffffffffffffff831660208201529192506001600160a01b0385169133917f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6910160405180910390a3505050565b6104d66108a1565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610523576040519150601f19603f3d011682016040523d82523d6000602084013e610528565b606091505b50509050806105795760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b5050565b6105856108a1565b61058f60006108e7565b565b6105996108a1565b60006105a58242610c52565b90506000836040516020016105ba9190610b51565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150156106555760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f2100000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b6000818152600160209081526040822084905560029190610678908701876109d2565b6001600160a01b0316815260208101919091526040016000908120906106a46080870160608801610c6b565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016106db8282610e41565b505050505050565b6106eb6108a1565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610738576040519150601f19603f3d011682016040523d82523d6000602084013e61073d565b606091505b505090508061078e5760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b505050565b600061079e33610843565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107db9796959493929190610f5b565b60405180910390a195945050505050565b6107f46108a1565b6001600160a01b038116610837576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161016d565b610840816108e7565b50565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff1691600191906108768385610fbb565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b6000546001600160a01b0316331461058f576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161016d565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060c0828403121561095657600080fd5b50919050565b60006020828403121561096e57600080fd5b813567ffffffffffffffff81111561098557600080fd5b6103e384828501610944565b6001600160a01b038116811461084057600080fd5b600080604083850312156109b957600080fd5b82356109c481610991565b946020939093013593505050565b6000602082840312156109e457600080fd5b813561039181610991565b60008060408385031215610a0257600080fd5b823567ffffffffffffffff811115610a1957600080fd5b610a2585828601610944565b95602094909401359450505050565b63ffffffff8116811461084057600080fd5b60ff8116811461084057600080fd5b8035610a6081610a46565b919050565b600080600080600060808688031215610a7d57600080fd5b8535610a8881610a34565b94506020860135610a9881610a34565b9350604086013567ffffffffffffffff80821115610ab557600080fd5b818801915088601f830112610ac957600080fd5b813581811115610ad857600080fd5b896020828501011115610aea57600080fd5b6020830195508094505050506060860135610b0481610a46565b809150509295509295909350565b67ffffffffffffffff8116811461084057600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235610b6281610991565b6001600160a01b0381166020840152506020830135610b8081610b12565b67ffffffffffffffff808216604085015260408501359150610ba182610a34565b63ffffffff808316606086015260608601359250610bbe83610a34565b80831660808601525060808501359150601e19853603018212610be057600080fd5b6020918501918201913581811115610bf757600080fd5b803603831315610c0657600080fd5b60c060a0860152610c1b60e086018285610b28565b92505050610c2b60a08501610a55565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c6557610c65610c3c565b92915050565b600060208284031215610c7d57600080fd5b813561039181610a34565b60008135610c6581610a34565b6000808335601e19843603018112610cac57600080fd5b83018035915067ffffffffffffffff821115610cc757600080fd5b602001915036819003821315610cdc57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680610d0d57607f821691505b60208210810361095657634e487b7160e01b600052602260045260246000fd5b601f82111561078e57600081815260208120601f850160051c81016020861015610d545750805b601f850160051c820191505b818110156106db57828155600101610d60565b67ffffffffffffffff831115610d8b57610d8b610ce3565b610d9f83610d998354610cf9565b83610d2d565b6000601f841160018114610dd35760008515610dbb5750838201355b600019600387901b1c1916600186901b178355610e2d565b600083815260209020601f19861690835b82811015610e045786850135825560209485019460019092019101610de4565b5086821015610e215760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60008135610c6581610a46565b8135610e4c81610991565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff1982161783556020840135610e8481610b12565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff0000000000000000000000000000000000000000000000000000000081848285161717855560408601359250610ee283610a34565b921760e09190911b909116178155610f1a610eff60608401610c88565b6001830163ffffffff821663ffffffff198254161781555050565b610f276080830183610c95565b610f35818360028601610d73565b5050610579610f4660a08401610e34565b6003830160ff821660ff198254161781555050565b6001600160a01b038816815267ffffffffffffffff87166020820152600063ffffffff808816604084015280871660608401525060c06080830152610fa460c083018587610b28565b905060ff831660a083015298975050505050505050565b67ffffffffffffffff818116838216019080821115610fdc57610fdc610c3c565b509291505056fea2646970667358221220efbb193a17e94268ef3d54233f20a35c5964e4fe56738c397d9e8b45bcd3d99e64736f6c63430008140033", + Bin: "0x6080604052346200002657620000146200002b565b604051611344620001bb823961134490f35b600080fd5b620000363362000083565b565b6200004b62000048620000489290565b90565b6001600160a01b031690565b620000489062000038565b6200006d906200004b565b9052565b60208101929162000036919062000062565b6200008f600062000057565b6200009a816200004b565b620000a5836200004b565b14620000b75750620000369062000158565b620000dd90620000c660405190565b631e4fbdf760e01b81529182916004830162000071565b0390fd5b62000048906200004b565b620000489054620000e1565b62000048906200004b906001600160a01b031682565b6200004890620000f8565b62000048906200010e565b906200013862000048620001549262000119565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b620001646000620000ec565b906200017281600062000124565b620001a9620001a27f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000119565b9162000119565b91620001b460405190565b600090a356fe6080604052600436101561001d575b3661122e5761001b61129c565b005b60003560e01c80630fcfbd11146100bd57806333a88c72146100b8578063346633fb146100b357806336d2da90146100ae578063715018a6146100a95780638da5cb5b146100a45780639730886d1461009f57806399a3ad211461009a578063b1454caa146100955763f2fde38b0361000e576103b0565b610376565b6102aa565b610291565b610225565b61020d565b6101ea565b6101bd565b61012f565b610100565b908160c09103126100d05790565b600080fd5b906020828203126100d057813567ffffffffffffffff81116100d0576100fb92016100c2565b90565b565b346100d05761012b61011b6101163660046100d5565b610c46565b6040519182918290815260200190565b0390f35b346100d05761012b61014a6101453660046100d5565b610b5b565b60405191829182901515815260200190565b6001600160a01b031690565b6001600160a01b0381165b036100d057565b905035906100fe82610168565b80610173565b905035906100fe82610187565b91906040838203126100d0576100fb906101b4818561017a565b9360200161018d565b6101d16101cb36600461019a565b90610653565b604051005b906020828203126100d0576100fb9161017a565b346100d0576101d16101fd3660046101d6565b611225565b60009103126100d057565b346100d05761021d366004610202565b6101d1610400565b346100d057610235366004610202565b61012b61024a6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b91906040838203126100d05782359067ffffffffffffffff82116100d0576101b4816100fb9386016100c2565b346100d0576101d16102a4366004610264565b906111f5565b346100d0576101d16102bd36600461019a565b906108f5565b63ffffffff8116610173565b905035906100fe826102c3565b909182601f830112156100d05781359167ffffffffffffffff83116100d05760200192600183028401116100d057565b60ff8116610173565b905035906100fe8261030c565b9190916080818403126100d05761033983826102cf565b9261034781602084016102cf565b92604083013567ffffffffffffffff81116100d05761036b836100fb9286016102dc565b939094606001610315565b346100d05761012b61039561038c366004610322565b9392909261099a565b6040519182918267ffffffffffffffff909116815260200190565b346100d0576101d16103c33660046101d6565b6104f1565b6103d0610408565b6100fe6103ee565b61015c6100fb6100fb9290565b6100fb906103d8565b6100fe6103fb60006103e5565b610552565b6100fe6103c8565b60005433906001600160a01b03168190036104205750565b61046a9061042d60405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6100fe9061047a610408565b61048460006103e5565b6001600160a01b0381166001600160a01b038316146104a757506100fe90610552565b61046a906104b460405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6100fe9061046e565b906001600160a01b03905b9181191691161790565b61015c6100fb6100fb926001600160a01b031690565b6100fb9061050f565b6100fb90610525565b906105476100fb61054e9261052e565b82546104fa565b9055565b6000546001600160a01b03169061056a816000610537565b61059d6105977f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361052e565b9161052e565b916105a760405190565b80805b0390a3565b6100fb6100fb6100fb9290565b0190565b156105c757565b60405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e67204574686572000000000000000000000000000000006064820152608490fd5b9081526040810192916100fe916020905b019067ffffffffffffffff169052565b610671349261066260006105af565b841190816106c4575b506105c0565b3361067b81610789565b6106ae6106a87f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b69361052e565b9361052e565b936105aa6106bb60405190565b92839283610632565b905083143861066b565b906106d89061052e565b600052602052604060002090565b6100fb905b67ffffffffffffffff1690565b6100fb90546106e6565b6106eb6100fb6100fb9290565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff9081169116019067ffffffffffffffff821161074657565b61070f565b9067ffffffffffffffff90610505565b6106eb6100fb6100fb9267ffffffffffffffff1690565b906107826100fb61054e9261075b565b825461074b565b906100fe60036107c76107b86107a76107a287856106ce565b6106f8565b956107b26001610702565b936106ce565b916107c2836106f8565b610725565b90610772565b906100fe916107da610408565b6108cf565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761081757604052565b6107df565b906100fe61082960405190565b92836107f5565b67ffffffffffffffff811161081757602090601f01601f19160190565b9061085f61085a83610830565b61081c565b918252565b3d1561087e576108733d61084d565b903d6000602084013e565b606090565b1561088a57565b60405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606490fd5b600080916100fe936108e060405190565b90818003925af16108ef610864565b50610883565b906100fe916107cd565b90826000939282370152565b919061092981610922816105bc9560209181520190565b80956108ff565b601f01601f191690565b97969461098360a095610976610990966109696100fe9b969760208f61064360c082019b60008301906001600160a01b03169052565b63ffffffff1660408d0152565b63ffffffff1660608b0152565b88830360808a015261090b565b94019060ff169052565b929091936109ed906109aa600090565b5033926109b684610789565b9687957fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937976109e460405190565b97889788610933565b0390a190565b506100fb90602081019061017a565b67ffffffffffffffff8116610173565b905035906100fe82610a02565b506100fb906020810190610a12565b506100fb9060208101906102cf565b9035601e1936839003018112156100d057016020813591019167ffffffffffffffff82116100d0573682900383136100d057565b506100fb906020810190610315565b906100fb9060a0610b2b610b2160c08401610aab610a9e88806109f3565b6001600160a01b03168652565b610acc610abb6020890189610a1f565b67ffffffffffffffff166020870152565b610ae9610adc6040890189610a2e565b63ffffffff166040870152565b610b06610af96060890189610a2e565b63ffffffff166060870152565b610b136080880188610a3d565b90868303608088015261090b565b9482810190610a71565b60ff16910152565b60208082526100fb92910190610a80565b906106d8565b6100fb9081565b6100fb9054610b4a565b610bad610bb291610b6a600090565b50610b93610b7760405190565b8092610b87602083019182610b33565b908103825203826107f5565b610ba5610b9e825190565b9160200190565b206001610b44565b610b51565b610bbc60006105af565b81119081610bc8575090565b429150111590565b9190565b15610bdb57565b60405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d697474656460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b610bad610c5591610b6a600090565b6100fb610c6260006105af565b8211610bd4565b906100fe91610c76610408565b611154565b9190820180921161074657565b15610c8f57565b60405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b9060001990610505565b90610d146100fb61054e926105af565b8254610cfa565b356100fb81610168565b356100fb816102c3565b610d426100fb6100fb9263ffffffff1690565b63ffffffff1690565b906106d890610d2f565b634e487b7160e01b600052603260045260246000fd5b8054821015610d8e57610d85600491600052602060002090565b91020190600090565b610d55565b634e487b7160e01b600052600060045260246000fd5b356100fb81610a02565b907bffffffffffffffff00000000000000000000000000000000000000009060a01b610505565b90610dea6100fb61054e9261075b565b8254610db3565b907fffffffff000000000000000000000000000000000000000000000000000000009060e01b610505565b90610e2c6100fb61054e92610d2f565b8254610df1565b9063ffffffff90610505565b90610e4f6100fb61054e92610d2f565b8254610e33565b903590601e1936829003018212156100d0570180359067ffffffffffffffff82116100d057602001913682900383136100d057565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610ec1575b6020831014610ebc57565b610e8b565b91607f1691610eb1565b9160001960089290920291821b911b610505565b9190610ef06100fb61054e936105af565b908354610ecb565b6100fe91600091610edf565b818110610f0f575050565b80610f1d6000600193610ef8565b01610f04565b9190601f8111610f3257505050565b610f446100fe93600052602060002090565b906020601f840181900483019310610f66575b6020601f909101040190610f04565b9091508190610f57565b919067ffffffffffffffff821161081757610f9582610f8f8554610ea1565b85610f23565b600090601f8311600114610fd05761054e929160009183610fc5575b5050600019600883021c1916906002021790565b013590503880610fb1565b601f19831691610fe585600052602060002090565b92815b81811061102257509160029391856001969410611009575b50505002019055565b0135600019601f84166008021c19169055388080611000565b91936020600181928787013581550195019201610fe8565b906100fe9291610f70565b356100fb8161030c565b9060ff90610505565b6110686100fb6100fb9260ff1690565b60ff1690565b9061107e6100fb61054e92611058565b825461104f565b6100fe919061110c9060a0906003906110d1816110aa6110a488610d1b565b82610537565b6110bf6110b960208901610da9565b82610dda565b6110cb60408801610d25565b90610e1c565b6110ea600182016110e460608801610d25565b90610e3f565b611104600282016110fe6080880188610e56565b9161103a565b019201611045565b9061106e565b9190611121576100fe91611085565b610d93565b9081549168010000000000000000831015610817578261114e9160016100fe95018155610d6b565b90611112565b6111f06100fb6111de61116a6100fe9542610c7b565b6111cb61117660405190565b6111888160208101610b878a82610b33565b611193610b9e825190565b20916111c66001936111a8610bad8287610b44565b946111c16000966111bb610bd0896105af565b14610c88565b610b44565b610d04565b6111d86002918601610d1b565b906106ce565b6111ea60608501610d25565b90610d4b565b611126565b906100fe91610c69565b6100fe9061120b610408565b6000806100fe9261121b3061052e565b316108e060405190565b6100fe906111ff565b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f727465640000000000000000000000000000000000000000006044820152606490fd5b6001600160a01b0390911681526040810192916100fe9160200152565b6040513d6000823e3d90fd5b6112a53061052e565b63346633fb34913390803b156100d0576112d5846000946112e06112c860405190565b9788968795869460e01b90565b845260048401611273565b03925af18015611309576112f15750565b6100fe90600061130181836107f5565b810190610202565b61129056fea26469706673582212206e339686bf8ddec6e8525b50d91c52800c1a7850e51220ac93a4baecace3761e64736f6c63430008140033", } // MessageBusABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ObsERC20/ObsERC20.go b/contracts/generated/ObsERC20/ObsERC20.go index 7b8d438305..f81fcbbc62 100644 --- a/contracts/generated/ObsERC20/ObsERC20.go +++ b/contracts/generated/ObsERC20/ObsERC20.go @@ -32,7 +32,7 @@ var ( // ObsERC20MetaData contains all meta data concerning the ObsERC20 contract. var ObsERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f31790553480156200003757600080fd5b5060405162000c4738038062000c478339810160408190526200005a9162000149565b818160036200006a838262000242565b50600462000079828262000242565b50505050506200030e565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000ac57600080fd5b81516001600160401b0380821115620000c957620000c962000084565b604051601f8301601f19908116603f01168101908282118183101715620000f457620000f462000084565b816040528381526020925086838588010111156200011157600080fd5b600091505b8382101562000135578582018301518183018401529082019062000116565b600093810190920192909252949350505050565b600080604083850312156200015d57600080fd5b82516001600160401b03808211156200017557600080fd5b62000183868387016200009a565b935060208501519150808211156200019a57600080fd5b50620001a9858286016200009a565b9150509250929050565b600181811c90821680620001c857607f821691505b602082108103620001e957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023d57600081815260208120601f850160051c81016020861015620002185750805b601f850160051c820191505b81811015620002395782815560010162000224565b5050505b505050565b81516001600160401b038111156200025e576200025e62000084565b62000276816200026f8454620001b3565b84620001ef565b602080601f831160018114620002ae5760008415620002955750858301515b600019600386901b1c1916600185901b17855562000239565b600085815260208120601f198616915b82811015620002df57888601518255948401946001909101908401620002be565b5085821015620002fe5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610929806200031e6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b4114610130578063a9059cbb14610138578063dd62ed3e1461014b57600080fd5b8063313ce5671461010e57806370a082311461011d57600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e957806323b872dd146100fb575b600080fd5b6100b061015e565b6040516100bd9190610773565b60405180910390f35b6100d96100d43660046107dd565b6101f0565b60405190151581526020016100bd565b6002545b6040519081526020016100bd565b6100d9610109366004610807565b61020a565b604051601281526020016100bd565b6100ed61012b366004610843565b61022e565b6100b06102d9565b6100d96101463660046107dd565b6102e8565b6100ed610159366004610865565b6102f6565b60606003805461016d90610898565b80601f016020809104026020016040519081016040528092919081815260200182805461019990610898565b80156101e65780601f106101bb576101008083540402835291602001916101e6565b820191906000526020600020905b8154815290600101906020018083116101c957829003601f168201915b5050505050905090565b6000336101fe818585610407565b60019150505b92915050565b600033610218858285610419565b610223858585610498565b506001949350505050565b60006001600160a01b038216320361025e576001600160a01b038216600090815260208190526040902054610204565b6001600160a01b038216330361028c576001600160a01b038216600090815260208190526040902054610204565b60405162461bcd60e51b815260206004820152601f60248201527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650060448201526064015b60405180910390fd5b60606004805461016d90610898565b6000336101fe818585610498565b6000326001600160a01b03841614806103175750326001600160a01b038316145b1561034a576001600160a01b038084166000908152600160209081526040808320938616835292905220545b9050610204565b336001600160a01b03841614806103695750336001600160a01b038316145b15610399576001600160a01b03808416600090815260016020908152604080832093861683529290522054610343565b60405162461bcd60e51b815260206004820152602160248201527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016102d0565b6104148383836001610529565b505050565b600061042584846102f6565b905060001981146104925781811015610483576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101829052604481018390526064016102d0565b61049284848484036000610529565b50505050565b6001600160a01b0383166104db576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016102d0565b6001600160a01b03821661051e576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016102d0565b610414838383610630565b6001600160a01b03841661056c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016102d0565b6001600160a01b0383166105af576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016102d0565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561049257826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161062291815260200190565b60405180910390a350505050565b6001600160a01b03831661065b57806002600082825461065091906108d2565b909155506106e69050565b6001600160a01b038316600090815260208190526040902054818110156106c7576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260248101829052604481018390526064016102d0565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661070257600280548290039055610721565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161076691815260200190565b60405180910390a3505050565b600060208083528351808285015260005b818110156107a057858101830151858201604001528201610784565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146107d857600080fd5b919050565b600080604083850312156107f057600080fd5b6107f9836107c1565b946020939093013593505050565b60008060006060848603121561081c57600080fd5b610825846107c1565b9250610833602085016107c1565b9150604084013590509250925092565b60006020828403121561085557600080fd5b61085e826107c1565b9392505050565b6000806040838503121561087857600080fd5b610881836107c1565b915061088f602084016107c1565b90509250929050565b600181811c908216806108ac57607f821691505b6020821081036108cc57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561020457634e487b7160e01b600052601160045260246000fdfea2646970667358221220747492c6ad6919950d95fb045569a252ef4e67afdd9357bceeee7893599576cd64736f6c63430008140033", + Bin: "0x60806040523462000031576200001f6200001862000175565b9062000209565b604051610b59620004498239610b5990f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160401b0381116200006e57602090601f01601f19160190565b60005b838110620000be5750506000910152565b8181015183820152602001620000ad565b90929192620000e8620000e2826200008d565b62000074565b9381855260208501908284011162000031576200008b92620000aa565b9080601f83011215620000315781516200012292602001620000cf565b90565b919091604081840312620000315780516001600160401b0381116200003157836200015291830162000105565b60208201519093906001600160401b038111620000315762000122920162000105565b6200019862000fa2803803806200018c8162000074565b92833981019062000125565b9091565b906001600160a01b03905b9181191691161790565b6200012290620001c7906001600160a01b031682565b6001600160a01b031690565b6200012290620001b1565b6200012290620001d3565b90620001fd620001226200020592620001de565b82546200019c565b9055565b9062000215916200042e565b6200008b73deb34a740eca1ec42c8b8204cbec0ba34fdd27f36005620001e9565b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156200026f575b60208310146200026957565b62000236565b91607f16916200025d565b9160001960089290920291821b911b620001a7565b6200012262000122620001229290565b9190620002b46200012262000205936200028f565b9083546200027a565b6200008b916000916200029f565b818110620002d7575050565b80620002e76000600193620002bd565b01620002cb565b9190601f8111620002fe57505050565b620003126200008b93600052602060002090565b906020601f84018190048301931062000336575b6020601f909101040190620002cb565b909150819062000326565b906200034b815190565b906001600160401b0382116200006e5762000373826200036c85546200024c565b85620002ee565b602090601f8311600114620003b25762000205929160009183620003a6575b5050600019600883021c1916906002021790565b01519050388062000392565b601f19831691620003c885600052602060002090565b9260005b8181106200040957509160029391856001969410620003ef575b50505002019055565b01516000196008601f8516021c19169055388080620003e6565b91936020600181928787015181550195019201620003cc565b906200008b9162000341565b90620004406200008b92600362000422565b60046200042256fe6080604052600436101561001257600080fd5b60003560e01c806306fdde03146100a2578063095ea7b31461009d57806318160ddd1461009857806323b872dd14610093578063313ce5671461008e57806370a082311461008957806395d89b4114610084578063a9059cbb1461007f5763dd62ed3e036100b257610312565b6102d3565b6102b8565b61029d565b61025a565b61023e565b6101e2565b6101b4565b610126565b60009103126100b257565b600080fd5b60005b8381106100ca5750506000910152565b81810151838201526020016100ba565b6100fb61010460209361010e936100ef815190565b80835293849260200190565b958691016100b7565b601f01601f191690565b0190565b6020808252610123929101906100da565b90565b346100b2576101363660046100a7565b61014d610141610463565b60405191829182610112565b0390f35b6001600160a01b031690565b6001600160a01b0381165b036100b257565b9050359061017c8261015d565b565b80610168565b9050359061017c8261017e565b91906040838203126100b257610123906101ab818561016f565b93602001610184565b346100b25761014d6101d06101ca366004610191565b906104c4565b60405191829182901515815260200190565b346100b2576101f23660046100a7565b61014d6101fd6104a5565b6040515b9182918290815260200190565b90916060828403126100b257610123610227848461016f565b93610235816020860161016f565b93604001610184565b346100b25761014d6101d061025436600461020e565b916104cf565b346100b25761026a3660046100a7565b61014d61027561048a565b6040519182918260ff909116815260200190565b906020828203126100b2576101239161016f565b346100b25761014d6101fd6102b3366004610289565b610990565b346100b2576102c83660046100a7565b61014d61014161046d565b346100b25761014d6101d06102e9366004610191565b906104af565b91906040838203126100b25761012390610309818561016f565b9360200161016f565b346100b25761014d6101fd6103283660046102ef565b90610a29565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610364575b602083101461035f57565b61032e565b91607f1691610354565b8054600093929161038b61038183610344565b8085529360200190565b91600181169081156103dd57506001146103a457505050565b6103b79192939450600052602060002090565b916000925b8184106103c95750500190565b8054848401526020909301926001016103bc565b92949550505060ff1916825215156020020190565b906101239161036e565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761043457604052565b6103fc565b9061017c6104539261044a60405190565b938480926103f2565b0383610412565b61012390610439565b610123600361045a565b610123600461045a565b6104846101236101239290565b60ff1690565b6101236012610477565b6101239081565b6101239054610494565b610123600261049b565b6104bf9190336104f6565b6104f6565b600190565b6104bf9190336107dd565b6104bf9291906104ba83338361090c565b6101516101236101239290565b610123906104e0565b92919061050360006104ed565b936001600160a01b0385166001600160a01b0382161461058f576001600160a01b0385166001600160a01b038316146105415761017c93945061068d565b61058b8561054e60405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b61058b8561059c60405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b610151610123610123926001600160a01b031690565b610123906105d9565b610123906105ef565b9061060b906105f8565b600052602052604060002090565b6001600160a01b03909116815260608101939261017c929091604091610640906020830152565b0152565b6101236101236101239290565b9061012361012361066192610644565b9055565b634e487b7160e01b600052601160045260246000fd5b9190820180921161068857565b610665565b816000610699816104ed565b6001600160a01b0381166001600160a01b03851603610763576106d3906101516106cc886106c7600261049b565b61067b565b6002610651565b6001600160a01b0383160361073e5750506106f96106cc846106f5600261049b565b0390565b61073961072f6107297fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef936105f8565b936105f8565b9361020160405190565b0390a3565b61075e9161074b91610601565b6107588561010e8361049b565b90610651565b6106f9565b9091506107786107738484610601565b61049b565b8581106107a057849291610151610791886106d3940390565b61079b8786610601565b610651565b8361058b876107ae60405190565b9384937fe450d38c00000000000000000000000000000000000000000000000000000000855260048501610619565b909161017c926001925b9091926107f460006104ed565b6001600160a01b0381166001600160a01b038416146108c2576001600160a01b0381166001600160a01b03851614610878575061083f8461079b8561083a866001610601565b610601565b61084857505050565b61073961072f6107297f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925936105f8565b61058b9061088560405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61058b906108cf60405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b9092919261091a8183610a29565b93600019850361092c575b5050509050565b808510610952576109409061094994950390565b906000926107e7565b80388080610925565b9061058b859261096160405190565b9384937ffb8f41b200000000000000000000000000000000000000000000000000000000855260048501610619565b326109ac6001600160a01b0383165b916001600160a01b031690565b14610a0e57336109c46001600160a01b03831661099f565b14610a0e5760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e6365006044820152606490fd5b6101239061077361012391610a21600090565b506000610601565b90326001600160a01b0383168114908115610aed575b50610ac957336001600160a01b0383168114908115610ad2575b50610ac95760405162461bcd60e51b815260206004820152602160248201527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b61012391610b08565b9050610ae66001600160a01b03831661099f565b1438610a59565b9050610b016001600160a01b03831661099f565b1438610a3f565b6101239161083a61077392610b1b600090565b50600161060156fea2646970667358221220690b36c269c48dfa20bda3cc64f66926a337b41752556ff602f3ccc85324b59564736f6c63430008140033", } // ObsERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ObscuroBridge/ObscuroBridge.go b/contracts/generated/ObscuroBridge/ObscuroBridge.go index d9f394b2ea..7bdbebb2a6 100644 --- a/contracts/generated/ObscuroBridge/ObscuroBridge.go +++ b/contracts/generated/ObscuroBridge/ObscuroBridge.go @@ -32,7 +32,7 @@ var ( // ObscuroBridgeMetaData contains all meta data concerning the ObscuroBridge contract. var ObscuroBridgeMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_TOKEN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_TOKEN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messengerAddress\",\"type\":\"address\"}],\"name\":\"configure\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messenger\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"promoteToAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"receiveAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"removeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendNative\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"setRemoteBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"whitelistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040526001805463ffffffff60a01b1916905534801561002057600080fd5b50611944806100306000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103b4578063d547741f146103d4578063e4c3ebc7146103f457600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017e5780631888d712146101a0578063248a9ca3146101b3575b600080fd5b34801561015557600080fd5b5061016961016436600461154f565b610428565b60405190151581526020015b60405180910390f35b34801561018a57600080fd5b5061019e61019936600461158e565b610491565b005b61019e6101ae36600461158e565b6104eb565b3480156101bf57600080fd5b506101e36101ce3660046115ab565b60009081526002602052604090206001015490565b604051908152602001610175565b3480156101fd57600080fd5b5061019e61020c3660046115c4565b610624565b34801561021d57600080fd5b5061019e61022c3660046115c4565b61064f565b34801561023d57600080fd5b5061019e61024c36600461163d565b6106a0565b34801561025d57600080fd5b506101e37f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019e6102a036600461158e565b610765565b3480156102b157600080fd5b506101e37fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019e6102f436600461158e565b6107b9565b34801561030557600080fd5b5061019e6103143660046116c0565b610894565b34801561032557600080fd5b506101696103343660046115c4565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019e61037a36600461158e565b610ab0565b34801561038b57600080fd5b506101e3600081565b3480156103a057600080fd5b5061019e6103af3660046116c0565b610b04565b3480156103c057600080fd5b5061019e6103cf36600461158e565b610cb1565b3480156103e057600080fd5b5061019e6103ef3660046115c4565b610e45565b34801561040057600080fd5b506101e37fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061048b57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104bb81610e6a565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105405760405162461bcd60e51b815260206004820152600f60248201527f456d707479207472616e736665722e000000000000000000000000000000000060448201526064015b60405180910390fd5b604080518082018252348082526001600160a01b03848116602093840190815284519384019290925290518116828401528251808303840181526060909201909252600354909161059891168260025b600080610e77565b6001546001600160a01b03166040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152346024830181905292169163346633fb916044016000604051808303818588803b15801561060757600080fd5b505af115801561061b573d6000803e3d6000fd5b50505050505050565b60008281526002602052604090206001015461063f81610e6a565b6106498383610f83565b50505050565b6001600160a01b0381163314610691576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069b8282611031565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106ca81610e6a565b6106f47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610f83565b50600063458ffd6360e01b878787878760405160240161071895949392919061172b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915260035490915061061b906001600160a01b0316826001610590565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561078f81610e6a565b61069b7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83611031565b6107c16110b8565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610840573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610864919061176d565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b039182169116331461091b5760405162461bcd60e51b815260206004820152603060248201527f436f6e74726163742063616c6c6572206973206e6f742074686520726567697360448201527f7465726564206d657373656e67657221000000000000000000000000000000006064820152608401610537565b806001600160a01b031661092d611121565b6001600160a01b0316146109a95760405162461bcd60e51b815260206004820152603160248201527f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2060448201527f696e636f72726563742073656e646572210000000000000000000000000000006064820152608401610537565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16156109f9576109f484848461119e565b610649565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff1615610a42576109f4826111a9565b60405162461bcd60e51b815260206004820152602560248201527f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206160448201527f737365742e0000000000000000000000000000000000000000000000000000006064820152608401610537565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610ada81610e6a565b61069b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610f83565b60008211610b545760405162461bcd60e51b815260206004820152601a60248201527f417474656d7074696e6720656d707479207472616e736665722e0000000000006044820152606401610537565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16610c275760405162461bcd60e51b815260206004820152604e60248201527f54686973206164647265737320686173206e6f74206265656e20676976656e2060448201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60648201527f742077686974656c69737465642e000000000000000000000000000000000000608482015260a401610537565b610c338333308561124b565b604080516001600160a01b038581166024830152604482018590528381166064808401919091528351808403909101815260849092019092526020810180516001600160e01b03167f83bece4d0000000000000000000000000000000000000000000000000000000017905260035490916106499116826000610590565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610cfc5750825b905060008267ffffffffffffffff166001148015610d195750303b155b905081158015610d27575080155b15610d5e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d9257845468ff00000000000000001916680100000000000000001785555b610d9b866107b9565b610dc57fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610f83565b50610df17fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610f83565b508315610e3d57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b600082815260026020526040902060010154610e6081610e6a565b6106498383611031565b610e7481336112b2565b50565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610ead91906117da565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff16906014610f008361181f565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b8152600401610f409493929190611869565b6020604051808303816000875af1158015610f5f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061b91906118a6565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166110295760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610fe13390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161048b565b50600061048b565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16156110295760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161048b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661111f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611175573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611199919061176d565b905090565b61069b838284611320565b6040516000906001600160a01b038316908281818181865af19150503d80600081146111f1576040519150601f19603f3d011682016040523d82523d6000602084013e6111f6565b606091505b50509050806112475760405162461bcd60e51b815260206004820152601460248201527f4661696c656420746f2073656e642045746865720000000000000000000000006044820152606401610537565b5050565b6040516001600160a01b0384811660248301528381166044830152606482018390526106499186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611351565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff16611247576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610537565b6040516001600160a01b0383811660248301526044820183905261069b91859182169063a9059cbb90606401611280565b60006113666001600160a01b038416836113cd565b9050805160001415801561138b57508080602001905181019061138991906118d0565b155b1561069b576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610537565b60606113db838360006113e2565b9392505050565b606081471015611420576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610537565b600080856001600160a01b0316848660405161143c91906118f2565b60006040518083038185875af1925050503d8060008114611479576040519150601f19603f3d011682016040523d82523d6000602084013e61147e565b606091505b509150915061148e868383611498565b9695505050505050565b6060826114ad576114a88261150d565b6113db565b81511580156114c457506001600160a01b0384163b155b15611506576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610537565b50806113db565b80511561151d5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561156157600080fd5b81356001600160e01b0319811681146113db57600080fd5b6001600160a01b0381168114610e7457600080fd5b6000602082840312156115a057600080fd5b81356113db81611579565b6000602082840312156115bd57600080fd5b5035919050565b600080604083850312156115d757600080fd5b8235915060208301356115e981611579565b809150509250929050565b60008083601f84011261160657600080fd5b50813567ffffffffffffffff81111561161e57600080fd5b60208301915083602082850101111561163657600080fd5b9250929050565b60008060008060006060868803121561165557600080fd5b853561166081611579565b9450602086013567ffffffffffffffff8082111561167d57600080fd5b61168989838a016115f4565b909650945060408801359150808211156116a257600080fd5b506116af888289016115f4565b969995985093965092949392505050565b6000806000606084860312156116d557600080fd5b83356116e081611579565b92506020840135915060408401356116f781611579565b809150509250925092565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038616815260606020820152600061174e606083018688611702565b8281036040840152611761818587611702565b98975050505050505050565b60006020828403121561177f57600080fd5b81516113db81611579565b60005b838110156117a557818101518382015260200161178d565b50506000910152565b600081518084526117c681602086016020860161178a565b601f01601f19169290920160200192915050565b602081526001600160a01b038251166020820152600060208301516060604084015261180960808401826117ae565b9050604084015160608401528091505092915050565b600063ffffffff80831681810361185f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6001019392505050565b600063ffffffff80871683528086166020840152506080604083015261189260808301856117ae565b905060ff8316606083015295945050505050565b6000602082840312156118b857600080fd5b815167ffffffffffffffff811681146113db57600080fd5b6000602082840312156118e257600080fd5b815180151581146113db57600080fd5b6000825161190481846020870161178a565b919091019291505056fea26469706673582212209080b4341dacf82f9a993515a09081c2f61eed4e485d15f5fba6af9c0305b82c64736f6c63430008140033", + Bin: "0x6080604052346200002657620000146200002b565b604051611c89620000b58239611c8990f35b600080fd5b6200003562000037565b565b62000035620000356200003562000035620000356200003562000035620000a6565b6200006c62000069620000699290565b90565b63ffffffff1690565b906200008962000069620000a29262000059565b82549063ffffffff60a01b9060a01b9181191691161790565b9055565b62000035600060016200007556fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461014257806316ce81491461013d5780631888d71214610138578063248a9ca3146101335780632f2ff15d1461012e57806336568abe14610129578063498d82ab146101245780635d8729701461011f5780635fa7b5841461011a57806375b238fc1461011557806375cb26721461011057806383bece4d1461010b57806391d148541461010657806393b3744214610101578063a217fddf146100fc578063a381c8e2146100f7578063c4d66de8146100f2578063d547741f146100ed5763e4c3ebc70361015a57610521565b610508565b6104f0565b6104d7565b6104bc565b610485565b610469565b610450565b610408565b6103cf565b6103b7565b61037e565b610357565b6102b4565b61029b565b61024d565b610213565b6101f6565b610189565b6001600160e01b031981165b0361015a57565b600080fd5b9050359061016c82610147565b565b9060208282031261015a576101829161015f565b90565b9052565b3461015a576101b66101a461019f36600461016e565b61055a565b60405191829182901515815260200190565b0390f35b6001600160a01b031690565b6001600160a01b038116610153565b9050359061016c826101c6565b9060208282031261015a57610182916101d5565b3461015a5761020e6102093660046101e2565b610e86565b604051005b61020e6102213660046101e2565b610f28565b80610153565b9050359061016c82610226565b9060208282031261015a576101829161022c565b3461015a576101b6610268610263366004610239565b610656565b6040519182918290815260200190565b919060408382031261015a5761018290610292818561022c565b936020016101d5565b3461015a5761020e6102ae366004610278565b90610690565b3461015a5761020e6102c7366004610278565b90610740565b909182601f8301121561015a5781359167ffffffffffffffff831161015a57602001926001830284011161015a57565b60608183031261015a5761031182826101d5565b92602082013567ffffffffffffffff811161015a57836103329184016102cd565b929093604082013567ffffffffffffffff811161015a5761035392016102cd565b9091565b3461015a5761020e61036a3660046102fd565b93929092610db6565b600091031261015a57565b3461015a5761038e366004610373565b6101b67f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a610268565b3461015a5761020e6103ca3660046101e2565b610e1a565b3461015a576103df366004610373565b6101b67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610268565b3461015a5761020e61041b3660046101e2565b6118d6565b909160608284031261015a5761018261043984846101d5565b93610447816020860161022c565b936040016101d5565b3461015a5761020e610463366004610420565b9161174f565b3461015a576101b66101a461047f366004610278565b9061061d565b3461015a5761020e6104983660046101e2565b610bb3565b6101826101826101829290565b610182600061049d565b6101826104aa565b3461015a576104cc366004610373565b6101b66102686104b4565b3461015a5761020e6104ea366004610420565b91611152565b3461015a5761020e6105033660046101e2565b610b4e565b3461015a5761020e61051b366004610278565b90610736565b3461015a57610531366004610373565b6101b67fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad2110578610268565b7f7965db0b000000000000000000000000000000000000000000000000000000006001600160e01b0319821614908115610592575090565b61018291506001600160e01b0319167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101ba610182610182926001600160a01b031690565b610182906105d6565b610182906105ec565b906105c8906105f5565b610182905b60ff1690565b6101829054610608565b61018291600061063a61064093610632600090565b5060026105c6565b016105fe565b610613565b6101829081565b6101829054610645565b600161066761018292610632600090565b0161064c565b9061016c9161068361067e82610656565b61069a565b9061068d916107b7565b50565b9061016c9161066d565b61016c9033906106c2565b6001600160a01b03909116815260408101929161016c9160200152565b906106d46106d0828461061d565b1590565b6106dc575050565b6107176106e860405190565b9283927fe2517d3f000000000000000000000000000000000000000000000000000000008452600484016106a5565b0390fd5b9061016c9161072c61067e82610656565b9061068d91610834565b9061016c9161071b565b9061074a336101ba565b6001600160a01b038216036107625761068d91610834565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b906107ac6101826107b392151590565b825461078d565b9055565b6107c46106d0838361061d565b1561082d576001916107e6836107e183600061063a8760026105c6565b61079c565b339061081c6108166108167f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b926105f5565b9261082660405190565b600090a490565b5050600090565b9061083f818361061d565b1561082d5761085960006107e1838261063a8760026105c6565b33906108896108166108167ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261089360405190565b600090a4600190565b1490565b6101829060401c61060d565b61018290546108a0565b610182905b67ffffffffffffffff1690565b61018290546108b6565b6108bb6101826101829290565b9067ffffffffffffffff90610792565b6108bb6101826101829267ffffffffffffffff1690565b906109166101826107b3926108ef565b82546108df565b9068ff00000000000000009060401b610792565b906109416101826107b392151590565b825461091d565b610185906108d2565b60208101929161016c9190610948565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090819061099a6109946106d0846108ac565b936108c8565b926000916109a7836108d2565b67ffffffffffffffff86161480610ac9575b6001956109d66109c8886108d2565b9167ffffffffffffffff1690565b149081610aa1575b155b9081610a98575b50610a6d57610a109082610a07856109fe896108d2565b97019687610906565b610a5e57610ae6565b610a1957505050565b610a2291610931565b610a597fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d291610a5060405190565b91829182610951565b0390a1565b610a688686610931565b610ae6565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b159050386109e7565b90506109e0610aaf306105f5565b3b610ac0610abc8761049d565b9190565b149190506109de565b50816109b9565b6101ba6101826101829290565b61018290610ad0565b610aef906118d6565b610b19337fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756107b7565b5061068d7fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad2110578610b486000610add565b906107b7565b61016c90610961565b61016c90610b847fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069a565b61068d907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756107b7565b6107b7565b61016c90610b57565b61016c9493929190610bed7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069a565b610d00565b90826000939282370152565b9190610c1c81610c1581610c269560209181520190565b8095610bf2565b601f01601f191690565b0190565b9391906101829593610c5d92610c50606088019360008901906001600160a01b03169052565b8683036020880152610bfe565b926040818503910152610bfe565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff821117610ca357604052565b610c6b565b610182906101ba565b6101829054610ca8565b634e487b7160e01b600052602160045260246000fd5b60031115610cdb57565b610cbb565b9061016c82610cd1565b61018290610ce0565b61060d6101826101829290565b9061016c94600494610d8694610d7793610d3b86610bae7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a90565b507f458ffd630000000000000000000000000000000000000000000000000000000095610d6760405190565b9889976020890190815201610c2a565b60208201810382520382610c81565b610d906003610cb1565b90610d9b6001610cea565b600091610db0610daa8461049d565b93610cf3565b93611b6b565b9061016c94939291610bbc565b61016c90610df07fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069a565b61068d907f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a610834565b61016c90610dc3565b61016c90610e507fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069a565b610e7b565b906001600160a01b0390610792565b90610e746101826107b3926105f5565b8254610e55565b61016c906003610e64565b61016c90610e23565b15610e9657565b60405162461bcd60e51b815260206004820152600f60248201527f456d707479207472616e736665722e00000000000000000000000000000000006044820152606490fd5b9061016c610ee860405190565b9283610c81565b6101826040610edb565b60408101929161016c9190805182526020908101516001600160a01b0316910152565b6040513d6000823e3d90fd5b34600091610f3f610f388461049d565b8311610e8f565b610fb3610f4a610eef565b610f548486830152565b6001600160a01b0383166020820152610f8b610f6f60405190565b8092610f7f602083019182610ef9565b90810382520382610c81565b610f956003610cb1565b90610fa06002610cea565b610fa98761049d565b91610db088610cf3565b610fc3610fbe611958565b6105f5565b9063346633fb91803b1561015a57610ff0848694610ffb610fe360405190565b9788968795869460e01b90565b8452600484016106a5565b03925af180156110335761100d575050565b8161016c92903d1061102c575b6110248183610c81565b810190610373565b503d61101a565b610f1c565b1561103f57565b60405162461bcd60e51b815260206004820152601a60248201527f417474656d7074696e6720656d707479207472616e736665722e0000000000006044820152606490fd5b1561108b57565b60405162461bcd60e51b815260206004820152604e60248201527f54686973206164647265737320686173206e6f74206265656e20676976656e2060448201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60648201527f742077686974656c69737465642e000000000000000000000000000000000000608482015260a490fd5b6001600160a01b03909116815260608101939261016c929091604091611143906020830152565b01906001600160a01b03169052565b9061120f60049261120061016c9560009461117661116f8761049d565b8211611038565b6111a86111a3857f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a61061d565b611084565b6111c5816111b5866105f5565b336111bf306105f5565b9161127a565b7f83bece4d00000000000000000000000000000000000000000000000000000000936111f060405190565b978895602087019081520161111c565b60208201810382520383610c81565b6112196003610cb1565b9161122382610cea565b90610db0610daa8461049d565b6112496112436101829263ffffffff1690565b60e01b90565b6001600160e01b03191690565b6001600160a01b0391821681529116602082015260608101929161016c9160400152565b906112b09061120061016c956004956112966323b872dd611230565b936112a060405190565b9788956020870190815201611256565b6112de565b801515610153565b9050519061016c826112b5565b9060208282031261015a57610182916112bd565b6112ea6112f1916105f5565b918261137f565b8051611300610abc600061049d565b1415908161135b575b506113115750565b6107179061131e60405190565b9182917f5274afe7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b611379915080602061136e6106d0935190565b8183010191016112ca565b38611309565b6101829161138d600061049d565b916113e6565b67ffffffffffffffff8111610ca357602090601f01601f19160190565b906113c26113bd83611393565b610edb565b918252565b3d156113e1576113d63d6113b0565b903d6000602084013e565b606090565b91906113f1306105f5565b8281311061141b575060006101829392826020839401905191855af16114156113c7565b91611465565b6107179061142860405190565b9182917fcd786059000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b9061147057506114f3565b8151600090611481610abc8361049d565b1490816114dc575b50611492575090565b6107179061149f60405190565b9182917f9996b315000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b90506114ec610abc833b9261049d565b1438611489565b8051611502610abc600061049d565b111561151057805190602001fd5b6040517f1425ea42000000000000000000000000000000000000000000000000000000008152600490fd5b1561154257565b60405162461bcd60e51b815260206004820152603060248201527f436f6e74726163742063616c6c6572206973206e6f742074686520726567697360448201527f7465726564206d657373656e67657221000000000000000000000000000000006064820152608490fd5b156115b457565b60405162461bcd60e51b815260206004820152603160248201527f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2060448201527f696e636f72726563742073656e646572210000000000000000000000000000006064820152608490fd5b9061016c92916116706116326003610cb1565b61164261163d611944565b61153b565b61166a61165d611650611962565b926001600160a01b031690565b916001600160a01b031690565b146115ad565b919061169c837f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a61061d565b156116aa5761016c9261175a565b50906116d6907fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057861061d565b156116e45761016c906117e7565b60405162461bcd60e51b815260206004820152602560248201527f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206160448201527f737365742e0000000000000000000000000000000000000000000000000000006064820152608490fd5b9061016c929161161f565b9161176761016c936105f5565b6112b060049261120061016c9561178163a9059cbb611230565b9261178b60405190565b96879460208601908152016106a5565b156117a257565b60405162461bcd60e51b815260206004820152601460248201527f4661696c656420746f2073656e642045746865720000000000000000000000006044820152606490fd5b60008061016c926117f760405190565b60009183905af16118066113c7565b5061179b565b61016c906118186118df565b61183e565b9050519061016c826101c6565b9060208282031261015a576101829161181d565b61184a611851916105f5565b6000610e64565b61187b6020611863610fbe6000610cb1565b63a1a227fa9061187260405190565b93849260e01b90565b825260049082905afa9081156110335761016c916118a1916000916118a8575b506105f5565b6001610e64565b6118c9915060203d81116118cf575b6118c18183610c81565b81019061182a565b3861189b565b503d6118b7565b61016c9061180c565b6118ea6106d061191b565b6118f057565b6040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152600490fd5b6101827ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006108ac565b3361089c61165d6101ba610fbe6000610cb1565b6101826001610cb1565b6119836020611974610fbe6000610cb1565b6363012de59061187260405190565b825260049082905afa9081156110335760009161199e575090565b610182915060203d81116118cf576118c18183610c81565b6101826060610edb565b60005b8381106119d35750506000910152565b81810151838201526020016119c3565b611a04610c1c602093610c26936119f8815190565b80835293849260200190565b958691016119c0565b80516001600160a01b031682529061018290604080611a3b60608401602087015185820360208701526119e3565b940151910152565b602080825261018292910190611a0d565b6101829060a01c5b63ffffffff1690565b6101829054611a54565b634e487b7160e01b600052601160045260246000fd5b63ffffffff1663ffffffff8114611a9c5760010190565b611a6f565b9077ffffffff00000000000000000000000000000000000000009060a01b610792565b611a5c6101826101829263ffffffff1690565b90611ae76101826107b392611ac4565b8254611aa1565b67ffffffffffffffff8116610153565b9050519061016c82611aee565b9060208282031261015a5761018291611afe565b94939160609161016c94611b54611b6193611b4760808b019460008c019063ffffffff169052565b63ffffffff1660208a0152565b87820360408901526119e3565b94019060ff169052565b919390602093611b98611b9f92611b92611b836119b6565b6001600160a01b039097168752565b86860152565b6040840152565b611bc6611bab60405190565b8093611bba8683019182611a43565b90810382520383610c81565b611c106000611bd8610fbe6001610cb1565b92611c1b63b1454caa91611bec6001611a65565b96611c00611bf989611a85565b6001611ad7565b604051998a988997889660e01b90565b865260048601611b1f565b03925af1801561103357611c2c5750565b61068d9060203d8111611c4c575b611c448183610c81565b810190611b0b565b503d611c3a56fea26469706673582212208428f2c7b82515d6464fd19853a19524f7b4a88ce6e1b9b802317c1683f9d4cf64736f6c63430008140033", } // ObscuroBridgeABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ProxyAdmin/ProxyAdmin.go b/contracts/generated/ProxyAdmin/ProxyAdmin.go new file mode 100644 index 0000000000..ca98f6cb83 --- /dev/null +++ b/contracts/generated/ProxyAdmin/ProxyAdmin.go @@ -0,0 +1,481 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ProxyAdmin + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ProxyAdminMetaData contains all meta data concerning the ProxyAdmin contract. +var ProxyAdminMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x60806040523462000030576200001e62000018620000d3565b620000f6565b60405161066362000265823961066390f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003057565b905051906200008a826200009b565b9060208282031262000030576200009891620000ad565b62000098620008c880380380620000ea8162000073565b928339810190620000bc565b6200008a906200012f565b6200008c62000098620000989290565b620000989062000101565b6001600160a01b03909116815260200190565b6200013b600062000111565b6001600160a01b0381166001600160a01b038316146200016157506200008a9062000202565b62000187906200017060405190565b631e4fbdf760e01b8152918291600483016200011c565b0390fd5b62000098906200008c565b6200009890546200018b565b62000098906200008c906001600160a01b031682565b6200009890620001a2565b6200009890620001b8565b90620001e262000098620001fe92620001c3565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200020e600062000196565b906200021c816000620001ce565b620002536200024c7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620001c3565b91620001c3565b916200025e60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063715018a6146100625780638da5cb5b1461005d5780639623609d14610058578063ad3cb1cc146100535763f2fde38b036100725761035a565b61031f565b610246565b6100a9565b610077565b600091031261007257565b600080fd5b3461007257610087366004610067565b61008f6103aa565b604051005b0390f35b6001600160a01b031690565b90565b565b34610072576100b9366004610067565b6100946100ce6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b6001600160a01b0381165b0361007257565b905035906100a7826100e8565b6001600160a01b0381166100f3565b905035906100a782610107565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761017457604052565b610123565b906100a761018660405190565b9283610152565b67ffffffffffffffff811161017457602090601f01601f19160190565b0190565b90826000939282370152565b909291926101cf6101ca8261018d565b610179565b93818552602085019082840111610072576100a7926101ae565b9080601f83011215610072578160206100a4933591016101ba565b916060838303126100725761021982846100fa565b926102278360208301610116565b92604082013567ffffffffffffffff8111610072576100a492016101e9565b61008f610254366004610204565b91610622565b906102676101ca8361018d565b918252565b610276600561025a565b7f352e302e30000000000000000000000000000000000000000000000000000000602082015290565b6100a461026c565b6100a461029f565b6100a46102a7565b60005b8381106102ca5750506000910152565b81810151838201526020016102ba565b6102fb6103046020936101aa936102ef815190565b80835293849260200190565b958691016102b7565b601f01601f191690565b60208082526100a4929101906102da565b346100725761032f366004610067565b61009461033a6102af565b6040519182918261030e565b90602082820312610072576100a491610116565b346100725761008f61036d366004610346565b61049b565b61037a6103b2565b6100a7610398565b6100986100a46100a49290565b6100a490610382565b6100a76103a5600061038f565b610514565b6100a7610372565b60005433906001600160a01b03168190036103ca5750565b610414906103d760405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6100a7906104246103b2565b61042e600061038f565b6001600160a01b0381166001600160a01b0383161461045157506100a790610514565b6104149061045e60405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6100a790610418565b6100986100a46100a4926001600160a01b031690565b6100a4906104a4565b6100a4906104ba565b906104dc6100a4610510926104c3565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000546001600160a01b03169061052c8160006104cc565b61055f6105597f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104c3565b916104c3565b9161056960405190565b600090a3565b906100a7929161057d6103b2565b6105b1565b6001600160a01b0390911681526100a491604082019160208184039101526102da565b6040513d6000823e3d90fd5b6105ba906104c3565b349190634f1ef286813b15610072576000936105e9916105f46105dc60405190565b9788968795869460e01b90565b845260048401610582565b03925af1801561061d576106055750565b6100a79060006106158183610152565b810190610067565b6105a5565b906100a7929161056f56fea26469706673582212205d5f75a536a5fd2f2e441550c1d5a4e715b6cff79e1cc29a86c7abd4b441f65364736f6c63430008140033", +} + +// ProxyAdminABI is the input ABI used to generate the binding from. +// Deprecated: Use ProxyAdminMetaData.ABI instead. +var ProxyAdminABI = ProxyAdminMetaData.ABI + +// ProxyAdminBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ProxyAdminMetaData.Bin instead. +var ProxyAdminBin = ProxyAdminMetaData.Bin + +// DeployProxyAdmin deploys a new Ethereum contract, binding an instance of ProxyAdmin to it. +func DeployProxyAdmin(auth *bind.TransactOpts, backend bind.ContractBackend, initialOwner common.Address) (common.Address, *types.Transaction, *ProxyAdmin, error) { + parsed, err := ProxyAdminMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ProxyAdminBin), backend, initialOwner) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ProxyAdmin{ProxyAdminCaller: ProxyAdminCaller{contract: contract}, ProxyAdminTransactor: ProxyAdminTransactor{contract: contract}, ProxyAdminFilterer: ProxyAdminFilterer{contract: contract}}, nil +} + +// ProxyAdmin is an auto generated Go binding around an Ethereum contract. +type ProxyAdmin struct { + ProxyAdminCaller // Read-only binding to the contract + ProxyAdminTransactor // Write-only binding to the contract + ProxyAdminFilterer // Log filterer for contract events +} + +// ProxyAdminCaller is an auto generated read-only Go binding around an Ethereum contract. +type ProxyAdminCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProxyAdminTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ProxyAdminTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProxyAdminFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ProxyAdminFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProxyAdminSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ProxyAdminSession struct { + Contract *ProxyAdmin // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProxyAdminCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ProxyAdminCallerSession struct { + Contract *ProxyAdminCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ProxyAdminTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ProxyAdminTransactorSession struct { + Contract *ProxyAdminTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProxyAdminRaw is an auto generated low-level Go binding around an Ethereum contract. +type ProxyAdminRaw struct { + Contract *ProxyAdmin // Generic contract binding to access the raw methods on +} + +// ProxyAdminCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ProxyAdminCallerRaw struct { + Contract *ProxyAdminCaller // Generic read-only contract binding to access the raw methods on +} + +// ProxyAdminTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ProxyAdminTransactorRaw struct { + Contract *ProxyAdminTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewProxyAdmin creates a new instance of ProxyAdmin, bound to a specific deployed contract. +func NewProxyAdmin(address common.Address, backend bind.ContractBackend) (*ProxyAdmin, error) { + contract, err := bindProxyAdmin(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ProxyAdmin{ProxyAdminCaller: ProxyAdminCaller{contract: contract}, ProxyAdminTransactor: ProxyAdminTransactor{contract: contract}, ProxyAdminFilterer: ProxyAdminFilterer{contract: contract}}, nil +} + +// NewProxyAdminCaller creates a new read-only instance of ProxyAdmin, bound to a specific deployed contract. +func NewProxyAdminCaller(address common.Address, caller bind.ContractCaller) (*ProxyAdminCaller, error) { + contract, err := bindProxyAdmin(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ProxyAdminCaller{contract: contract}, nil +} + +// NewProxyAdminTransactor creates a new write-only instance of ProxyAdmin, bound to a specific deployed contract. +func NewProxyAdminTransactor(address common.Address, transactor bind.ContractTransactor) (*ProxyAdminTransactor, error) { + contract, err := bindProxyAdmin(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ProxyAdminTransactor{contract: contract}, nil +} + +// NewProxyAdminFilterer creates a new log filterer instance of ProxyAdmin, bound to a specific deployed contract. +func NewProxyAdminFilterer(address common.Address, filterer bind.ContractFilterer) (*ProxyAdminFilterer, error) { + contract, err := bindProxyAdmin(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ProxyAdminFilterer{contract: contract}, nil +} + +// bindProxyAdmin binds a generic wrapper to an already deployed contract. +func bindProxyAdmin(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ProxyAdminMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ProxyAdmin *ProxyAdminRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ProxyAdmin.Contract.ProxyAdminCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ProxyAdmin *ProxyAdminRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProxyAdmin.Contract.ProxyAdminTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ProxyAdmin *ProxyAdminRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ProxyAdmin.Contract.ProxyAdminTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ProxyAdmin *ProxyAdminCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ProxyAdmin.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ProxyAdmin *ProxyAdminTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProxyAdmin.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ProxyAdmin *ProxyAdminTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ProxyAdmin.Contract.contract.Transact(opts, method, params...) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ProxyAdmin *ProxyAdminCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ProxyAdmin.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ProxyAdmin *ProxyAdminSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ProxyAdmin.Contract.UPGRADEINTERFACEVERSION(&_ProxyAdmin.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ProxyAdmin *ProxyAdminCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ProxyAdmin.Contract.UPGRADEINTERFACEVERSION(&_ProxyAdmin.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ProxyAdmin *ProxyAdminCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ProxyAdmin.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ProxyAdmin *ProxyAdminSession) Owner() (common.Address, error) { + return _ProxyAdmin.Contract.Owner(&_ProxyAdmin.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ProxyAdmin *ProxyAdminCallerSession) Owner() (common.Address, error) { + return _ProxyAdmin.Contract.Owner(&_ProxyAdmin.CallOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ProxyAdmin *ProxyAdminTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ProxyAdmin *ProxyAdminSession) RenounceOwnership() (*types.Transaction, error) { + return _ProxyAdmin.Contract.RenounceOwnership(&_ProxyAdmin.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ProxyAdmin.Contract.RenounceOwnership(&_ProxyAdmin.TransactOpts) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ProxyAdmin *ProxyAdminTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ProxyAdmin *ProxyAdminSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ProxyAdmin.Contract.TransferOwnership(&_ProxyAdmin.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ProxyAdmin.Contract.TransferOwnership(&_ProxyAdmin.TransactOpts, newOwner) +} + +// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. +// +// Solidity: function upgradeAndCall(address proxy, address implementation, bytes data) payable returns() +func (_ProxyAdmin *ProxyAdminTransactor) UpgradeAndCall(opts *bind.TransactOpts, proxy common.Address, implementation common.Address, data []byte) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "upgradeAndCall", proxy, implementation, data) +} + +// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. +// +// Solidity: function upgradeAndCall(address proxy, address implementation, bytes data) payable returns() +func (_ProxyAdmin *ProxyAdminSession) UpgradeAndCall(proxy common.Address, implementation common.Address, data []byte) (*types.Transaction, error) { + return _ProxyAdmin.Contract.UpgradeAndCall(&_ProxyAdmin.TransactOpts, proxy, implementation, data) +} + +// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. +// +// Solidity: function upgradeAndCall(address proxy, address implementation, bytes data) payable returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) UpgradeAndCall(proxy common.Address, implementation common.Address, data []byte) (*types.Transaction, error) { + return _ProxyAdmin.Contract.UpgradeAndCall(&_ProxyAdmin.TransactOpts, proxy, implementation, data) +} + +// ProxyAdminOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ProxyAdmin contract. +type ProxyAdminOwnershipTransferredIterator struct { + Event *ProxyAdminOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ProxyAdminOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ProxyAdminOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ProxyAdminOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ProxyAdminOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProxyAdminOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProxyAdminOwnershipTransferred represents a OwnershipTransferred event raised by the ProxyAdmin contract. +type ProxyAdminOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ProxyAdmin *ProxyAdminFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ProxyAdminOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ProxyAdmin.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &ProxyAdminOwnershipTransferredIterator{contract: _ProxyAdmin.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ProxyAdmin *ProxyAdminFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ProxyAdminOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ProxyAdmin.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ProxyAdminOwnershipTransferred) + if err := _ProxyAdmin.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ProxyAdmin *ProxyAdminFilterer) ParseOwnershipTransferred(log types.Log) (*ProxyAdminOwnershipTransferred, error) { + event := new(ProxyAdminOwnershipTransferred) + if err := _ProxyAdmin.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/generated/SafeERC20/SafeERC20.go b/contracts/generated/SafeERC20/SafeERC20.go index bb79fc3c83..dd38a1cdd7 100644 --- a/contracts/generated/SafeERC20/SafeERC20.go +++ b/contracts/generated/SafeERC20/SafeERC20.go @@ -32,7 +32,7 @@ var ( // SafeERC20MetaData contains all meta data concerning the SafeERC20 contract. var SafeERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a053799183996b12f2e950ef2eec3337f0d158e561631c0d8396f46bdbdbb24164736f6c63430008140033", + Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea2646970667358221220097f8f46b6734165f7ab06c6b165324e986c3f7d860255e827475be01d36367764736f6c63430008140033", } // SafeERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/Strings/Strings.go b/contracts/generated/Strings/Strings.go index 744d667f6b..382f48868e 100644 --- a/contracts/generated/Strings/Strings.go +++ b/contracts/generated/Strings/Strings.go @@ -32,7 +32,7 @@ var ( // StringsMetaData contains all meta data concerning the Strings contract. var StringsMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204c14ed779ba5121e803c74d38b342784e50c8a2524f56414382ea5e0cb692b4064736f6c63430008140033", + Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea2646970667358221220eb502f249f953290e5e964d13eabad190b25cda5f279e8d9897e136ac3fa882764736f6c63430008140033", } // StringsABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go new file mode 100644 index 0000000000..2ae01538b8 --- /dev/null +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -0,0 +1,338 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package SystemDeployer + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. +var SystemDeployerMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", + Bin: "0x6080604052346200002e576200001e62000018620000d1565b620000f4565b604051603f620003818239603f90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b038116036200002e57565b90505190620000888262000099565b906020828203126200002e576200009691620000ab565b620000966200312280380380620000e88162000071565b928339810190620000ba565b620000889062000164565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b62000096906200010b565b620000969062000121565b620001536200014d620000969263ffffffff1690565b60e01b90565b6001600160e01b03191690565b0190565b60405161183281016001600160401b038111828210176200006b57620001918291611832620018f0843990565b03906000f080156200028d576200020d916200020760049262000201620001bc63485cc95562000137565b620001f13386620001cc60405190565b98899460208601908152016001600160a01b0391821681529116602082015260400190565b6020820181038252038562000049565b6200012c565b62000335565b620002887fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69916200023d60405190565b9182918260408082526014908201527f5472616e73616374696f6e73416e616c797a657200000000000000000000000060608201526001600160a01b03909116602082015260800190565b0390a1565b620000ff565b60005b838110620002a75750506000910152565b818101518382015260200162000296565b620002dd620002e76020936200016093620002d1815190565b80835293849260200190565b9586910162000293565b601f01601f191690565b620003276200009694929362000317606084019560008501906001600160a01b03169052565b6001600160a01b03166020830152565b6040818403910152620002b8565b90604051926115308401916001600160401b038311858410176200006b5784936200036993611530620003c08739620002f1565b03906000f080156200028d5762000096906200012c56fe6080604052600080fdfea2646970667358221220d59d030c58851607d5c752c5e8c020b706a96fc11fd5aeb21045e3f6f821a88c64736f6c6343000814003360a060405262000019620000126200019f565b91620001ff565b6040516105e762000681823960805181603001526105e790f35b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b03811603620000ab57565b600080fd5b90505190620000888262000099565b6001600160401b0381116200006b57602090601f01601f19160190565b60005b838110620000f05750506000910152565b8181015183820152602001620000df565b909291926200011a6200011482620000bf565b62000071565b93818552602085019082840111620000ab576200008892620000dc565b9080601f83011215620000ab578151620000969260200162000101565b91606083830312620000ab576200016c8284620000b0565b926200017c8360208301620000b0565b60408201519093906001600160401b038111620000ab5762000096920162000137565b620001c26200153080380380620001b68162000071565b92833981019062000154565b909192565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b6200009690620001d3565b6200009690620001e9565b916200020c919262000288565b604051906108c882016001600160401b038111838210176200006b5782916200024b916108c862000c6885396001600160a01b03909116815260200190565b03906000f0801562000282576200026290620001f4565b608052620000886200027c6080516001600160a01b031690565b62000406565b620001c7565b906200008891620002a4565b6200009662000096620000969290565b90620002b08262000381565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b620002dc83620001f4565b90620002e760405190565b600090a2805162000301620002fd600062000294565b9190565b111562000316576200031391620005a5565b50565b50506200008862000543565b620000967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc62000294565b9062000361620000966200037d92620001f4565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6000813b62000394620002fd8362000294565b14620003b557906200008891620003ae6200009662000322565b016200034d565b620003e882620003c460405190565b634c9c8ce360e01b8152918291600483016001600160a01b03909116815260200190565b0390fd5b6001600160a01b0391821681529116602082015260400190565b6200008890620004156200049b565b817f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91620004506200044660405190565b92839283620003ec565b0390a1620004d1565b620000967fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610362000294565b62000096906200008a565b62000096905462000484565b620000966000620004af6200009662000459565b016200048f565b6200008a62000096620000969290565b6200009690620004b6565b90600091620004e083620004c6565b926001600160a01b0384166001600160a01b03831614620005105762000088929350620003ae6200009662000459565b620003e8846200051f60405190565b633173bdd160e11b8152918291600483016001600160a01b03909116815260200190565b3462000554620002fd600062000294565b116200055c57565b60405163b398979f60e01b8152600490fd5b906200057e6200011483620000bf565b918252565b3d15620005a057620005953d6200056e565b903d6000602084013e565b606090565b6000806200009693620005b6606090565b50805190602001845af4620005ca62000583565b9190620005d857506200064d565b8151600090620005ec620002fd8362000294565b14908162000632575b50620005ff575090565b620003e8906200060e60405190565b639996b31560e01b8152918291600483016001600160a01b03909116815260200190565b905062000645620002fd833b9262000294565b1438620005f5565b80516200065f620002fd600062000294565b11156200066e57805190602001fd5b604051630a12f52160e11b8152600490fdfe608060405261000c61000e565b005b610016610027565b565b6001600160a01b031690565b90565b336100616100547f0000000000000000000000000000000000000000000000000000000000000000610018565b916001600160a01b031690565b036100e8577f4f1ef286000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060003516146100e0576040517fd2b576ec000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b6100166102ed565b6100f06100f5565b610156565b610024610140565b6100246100246100249290565b6100247f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6100fd565b546001600160a01b031690565b610024600061015061002461010a565b01610133565b60008091368280378136915af43d6000803e15610172573d6000f35b3d6000fd5b9093929384831161018f57841161018f578101920390565b600080fd5b6001600160a01b0381160361018f57565b9050359061001682610194565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761020357604052565b6101b2565b9061001661021560405190565b92836101e1565b67ffffffffffffffff811161020357602090601f01601f19160190565b90826000939282370152565b9092919261025a6102558261021c565b610208565b9381855260208501908284011161018f5761001692610239565b9080601f8301121561018f5781602061002493359101610245565b91909160408184031261018f576102a683826101a5565b92602082013567ffffffffffffffff811161018f576100249201610274565b610018610024610024926001600160a01b031690565b610024906102c5565b610024906102db565b61001661032361031c6103146103103660008161030a60046100fd565b91610177565b9091565b81019061028f565b91906102e4565b9061032d826103ef565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b610357836102e4565b9061036160405190565b600090a2805161037861037460006100fd565b9190565b111561038a57610387916104c7565b50565b5050610016610456565b6001600160a01b03909116815260200190565b906103b76100246103eb926102e4565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000813b6103ff610374836100fd565b1461041a57906100169161041461002461010a565b016103a7565b6100dc8261042760405190565b9182917f4c9c8ce300000000000000000000000000000000000000000000000000000000835260048301610394565b3461046461037460006100fd565b1161046b57565b6040517fb398979f000000000000000000000000000000000000000000000000000000008152600490fd5b906104a36102558361021c565b918252565b3d156104c2576104b73d610496565b903d6000602084013e565b606090565b600080610024936104d6606090565b50805190602001845af46104e86104a8565b91906104f45750610569565b8151600090610505610374836100fd565b149081610552575b50610516575090565b6100dc9061052360405190565b9182917f9996b31500000000000000000000000000000000000000000000000000000000835260048301610394565b9050610562610374833b926100fd565b143861050d565b805161057861037460006100fd565b111561058657805190602001fd5b6040517f1425ea42000000000000000000000000000000000000000000000000000000008152600490fdfea2646970667358221220782f2801dba6b92d163f770087c095f4a3bcf48f3a41dbeafc28edfa481d940f64736f6c6343000814003360806040523462000030576200001e62000018620000d3565b620000f6565b60405161066362000265823961066390f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003057565b905051906200008a826200009b565b9060208282031262000030576200009891620000ad565b62000098620008c880380380620000ea8162000073565b928339810190620000bc565b6200008a906200012f565b6200008c62000098620000989290565b620000989062000101565b6001600160a01b03909116815260200190565b6200013b600062000111565b6001600160a01b0381166001600160a01b038316146200016157506200008a9062000202565b62000187906200017060405190565b631e4fbdf760e01b8152918291600483016200011c565b0390fd5b62000098906200008c565b6200009890546200018b565b62000098906200008c906001600160a01b031682565b6200009890620001a2565b6200009890620001b8565b90620001e262000098620001fe92620001c3565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200020e600062000196565b906200021c816000620001ce565b620002536200024c7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620001c3565b91620001c3565b916200025e60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063715018a6146100625780638da5cb5b1461005d5780639623609d14610058578063ad3cb1cc146100535763f2fde38b036100725761035a565b61031f565b610246565b6100a9565b610077565b600091031261007257565b600080fd5b3461007257610087366004610067565b61008f6103aa565b604051005b0390f35b6001600160a01b031690565b90565b565b34610072576100b9366004610067565b6100946100ce6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b6001600160a01b0381165b0361007257565b905035906100a7826100e8565b6001600160a01b0381166100f3565b905035906100a782610107565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761017457604052565b610123565b906100a761018660405190565b9283610152565b67ffffffffffffffff811161017457602090601f01601f19160190565b0190565b90826000939282370152565b909291926101cf6101ca8261018d565b610179565b93818552602085019082840111610072576100a7926101ae565b9080601f83011215610072578160206100a4933591016101ba565b916060838303126100725761021982846100fa565b926102278360208301610116565b92604082013567ffffffffffffffff8111610072576100a492016101e9565b61008f610254366004610204565b91610622565b906102676101ca8361018d565b918252565b610276600561025a565b7f352e302e30000000000000000000000000000000000000000000000000000000602082015290565b6100a461026c565b6100a461029f565b6100a46102a7565b60005b8381106102ca5750506000910152565b81810151838201526020016102ba565b6102fb6103046020936101aa936102ef815190565b80835293849260200190565b958691016102b7565b601f01601f191690565b60208082526100a4929101906102da565b346100725761032f366004610067565b61009461033a6102af565b6040519182918261030e565b90602082820312610072576100a491610116565b346100725761008f61036d366004610346565b61049b565b61037a6103b2565b6100a7610398565b6100986100a46100a49290565b6100a490610382565b6100a76103a5600061038f565b610514565b6100a7610372565b60005433906001600160a01b03168190036103ca5750565b610414906103d760405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6100a7906104246103b2565b61042e600061038f565b6001600160a01b0381166001600160a01b0383161461045157506100a790610514565b6104149061045e60405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6100a790610418565b6100986100a46100a4926001600160a01b031690565b6100a4906104a4565b6100a4906104ba565b906104dc6100a4610510926104c3565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000546001600160a01b03169061052c8160006104cc565b61055f6105597f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104c3565b916104c3565b9161056960405190565b600090a3565b906100a7929161057d6103b2565b6105b1565b6001600160a01b0390911681526100a491604082019160208184039101526102da565b6040513d6000823e3d90fd5b6105ba906104c3565b349190634f1ef286813b15610072576000936105e9916105f46105dc60405190565b9788968795869460e01b90565b845260048401610582565b03925af1801561061d576106055750565b6100a79060006106158183610152565b810190610067565b6105a5565b906100a7929161056f56fea26469706673582212205d5f75a536a5fd2f2e441550c1d5a4e715b6cff79e1cc29a86c7abd4b441f65364736f6c6343000814003360806040523461001a57604051611812610020823961181290f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146100d2578063248a9ca3146100cd5780632f2ff15d146100c857806336568abe146100c3578063485cc955146100be578063508a50f4146100b95780635f03a661146100b457806391d14854146100af5780639dbbcf8e146100aa578063a217fddf146100a5578063d547741f146100a05763ee546fd803610102576103b5565b610388565b61036d565b610336565b6102e6565b6102ad565b610274565b610250565b61021d565b6101ff565b610189565b610131565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361010257565b600080fd5b90503590610114826100d7565b565b906020828203126101025761012a91610107565b90565b9052565b346101025761015e61014c610147366004610116565b6103cd565b60405191829182901515815260200190565b0390f35b806100fb565b9050359061011482610162565b906020828203126101025761012a91610168565b346101025761015e6101a461019f366004610175565b6104f0565b6040519182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166100fb565b90503590610114826101c0565b91906040838203126101025761012a906101f68185610168565b936020016101cf565b34610102576102186102123660046101dc565b90610532565b604051005b34610102576102186102303660046101dc565b906105e2565b91906040838203126101025761012a906101f681856101cf565b3461010257610218610263366004610236565b906109d3565b600091031261010257565b3461010257610284366004610269565b61015e7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5986101a4565b34610102576102bd366004610269565b61015e7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db6101a4565b346101025761015e61014c6102fc3660046101dc565b906104c0565b908160209103126101025790565b9060208282031261010257813567ffffffffffffffff81116101025761012a9201610302565b3461010257610218610349366004610310565b6110ca565b61012a61012a61012a9290565b61012a600061034e565b61012a61035b565b346101025761037d366004610269565b61015e6101a4610365565b346101025761021861039b3660046101dc565b906105d8565b906020828203126101025761012a916101cf565b34610102576102186103c83660046103a1565b610ae3565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082161490811561041d575090565b61012a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101b461012a61012a926001600160a01b031690565b61012a90610479565b61012a9061048f565b9061046b90610498565b61012a905b60ff1690565b61012a90546104ab565b61012a916104da916104d460009182610469565b016104a1565b6104b6565b61012a9081565b61012a90546104df565b600161050961012a92610501600090565b506000610469565b016104e6565b9061011491610525610520826104f0565b61053c565b9061052f91610659565b50565b906101149161050f565b610114903390610564565b6001600160a01b0390911681526040810192916101149160200152565b9061057661057282846104c0565b1590565b61057e575050565b6105b961058a60405190565b9283927fe2517d3f00000000000000000000000000000000000000000000000000000000845260048401610547565b0390fd5b90610114916105ce610520826104f0565b9061052f916106d5565b90610114916105bd565b906105ec336101b4565b6001600160a01b038216036106045761052f916106d5565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061064e61012a61065592151590565b825461062f565b9055565b61066661057283836104c0565b156106ce57600191610687836106828360006104d48782610469565b61063e565b33906106bd6106b76106b77f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b92610498565b926106c760405190565b600090a490565b5050600090565b906106e081836104c0565b156106ce576106f9600061068283826104d48782610469565b33906107296106b76106b77ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261073360405190565b600090a4600190565b61012a9060401c6104b0565b61012a905461073c565b61012a905b67ffffffffffffffff1690565b61012a9054610752565b61075761012a61012a9290565b9067ffffffffffffffff90610634565b61075761012a61012a9267ffffffffffffffff1690565b906107b261012a6106559261078b565b825461077b565b9068ff00000000000000009060401b610634565b906107dd61012a61065592151590565b82546107b9565b61012d9061076e565b60208101929161011491906107e4565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00908161083661083061057283610748565b91610764565b936000926108438461076e565b67ffffffffffffffff87161480610965575b6001966108726108648961076e565b9167ffffffffffffffff1690565b14908161093d575b155b9081610934575b50610909576108ac91836108a38661089a8a61076e565b980197886107a2565b6108fa5761096c565b6108b557505050565b6108be916107cd565b6108f57fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916108ec60405190565b918291826107ed565b0390a1565b61090487876107cd565b61096c565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b15905038610883565b905061087c61094b30610498565b3b61095c6109588861034e565b9190565b1491905061087a565b5082610855565b906109ac61052f926109858161098061035b565b610659565b507ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598610659565b507f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610659565b90610114916107fd565b61011490610a0a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59861053c565b610ace565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8054821015610a5e57610a55600191600052602060002090565b91020190600090565b610a25565b91906008610634910291610a7d6001600160a01b03841b90565b921b90565b9190610a9361012a61065593610498565b908354610a63565b9081549168010000000000000000831015610ac95782610ac391600161011495018155610a3b565b90610a82565b610a0f565b61011490610add600191610498565b90610a9b565b610114906109dd565b61011490610b197f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db61053c565b610f59565b903590601e193682900301821215610102570180359067ffffffffffffffff82116101025760200191602082023603831361010257565b90601f01601f1916810190811067ffffffffffffffff821117610ac957604052565b90610114610b8460405190565b9283610b55565b67ffffffffffffffff8111610ac95760208091020190565b90610bb5610bb083610b8b565b610b77565b918252565b61012a6101c0610b77565b60209081808080808080808080808080610bdd610bba565b9e8f60008152016000815201600081520160008152016000815201600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b61012a610bc5565b60005b828110610c3e57505050565b602090610c49610c27565b8184015201610c32565b90610114610c69610c6384610ba3565b93610b8b565b601f190160208401610c2f565b634e487b7160e01b600052601160045260246000fd5b6000198114610c9b5760010190565b610c76565b903590601e193682900301821215610102570180359067ffffffffffffffff8211610102576020019136829003831361010257565b90821015610a5e576020610cec9202810190610ca0565b9091565b90610cf9825190565b811015610a5e576020809102010190565b61012a916008021c6101b4565b9061012a9154610d0a565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b610d66610d6f602093610d7993610d5a815190565b80835293849260200190565b95869101610d22565b601f01601f191690565b0190565b90610d9d610d96610d8c845190565b8084529260200190565b9260200190565b9060005b818110610dae5750505090565b909192610dd4610dcd60019286516001600160a01b0316815260200190565b9460200190565b929101610da1565b805160ff16825261012a916101a0610e626101c08301610e0160208601516020860152565b610e1060408601516040860152565b610e1f60608601516060860152565b610e2e60808601516080860152565b60a0858101516001600160a01b031690850152610e5060c086015160c0860152565b60e085015184820360e0860152610d45565b6101008085015160ff169084015292610e82610120820151610120850152565b610e93610140820151610140850152565b610ea4610160820151610160850152565b610eb5610180820151610180850152565b0151906101a0818403910152610d7d565b9061012a91610ddc565b90610ee6610edc835190565b8083529160200190565b9081610ef86020830284019460200190565b926000915b838310610f0c57505050505090565b90919293946020610f2f610f2883856001950387528951610ec6565b9760200190565b9301930191939290610efd565b602080825261012a92910190610ed0565b6040513d6000823e3d90fd5b610f6b610f668280610b1e565b905090565b90600091610f7b6109588461034e565b146110c65781810190610f99610f94610f668484610b1e565b610c53565b93610fa38461034e565b610fb361012a610f668686610b1e565b811015610ffb5780610fdb610fd5610ff693610fcf8888610b1e565b90610cd5565b90611155565b610fe58289610cf0565b52610ff08188610cf0565b50610c8c565b610fa3565b50929150506110098161034e565b600161101661012a825490565b8210156110bf5761103361102d8361103893610a3b565b90610d17565b610498565b9063630ac52c91803b156101025761105e92849161105560405190565b94859260e01b90565b82528183816110708b60048301610f3c565b03925af19182156110ba576110899261108e5750610c8c565b611009565b6110ad90843d86116110b3575b6110a58183610b55565b810190610269565b38610ff0565b503d61109b565b610f4d565b5050509050565b5050565b61011490610aec565b156110da57565b60405162461bcd60e51b815260206004820152601660248201527f456d707479207472616e73616374696f6e2064617461000000000000000000006044820152606490fd5b9190811015610a5e570190565b6104b061012a61012a9260ff1690565b61012a9060f81c61112c565b6104b061012a61012a9290565b9061115e610c27565b506000611177826111716109588461034e565b116110d3565b6111c46111be6111b961119361118c8561034e565b868861111f565b357fff000000000000000000000000000000000000000000000000000000000000001690565b61113c565b91611148565b60ff8216036111d7575061012a91611378565b6111e16001611148565b60ff8216036111f4575061012a9161156e565b6112086112016002611148565b9160ff1690565b036112165761012a9161171b565b60405162461bcd60e51b815260206004820152601c60248201527f556e737570706f72746564207472616e73616374696f6e2074797065000000006044820152606490fd5b67ffffffffffffffff8111610ac957602090601f01601f19160190565b90826000939282370152565b90929192611294610bb08261125b565b938185526020850190828401116101025761011492611278565b9080601f830112156101025781602061012a93359101611284565b60ff81166100fb565b90503590610114826112c9565b909161012082840312610102576112f68383610168565b926113048160208501610168565b926113128260408301610168565b9261132083606084016101cf565b9261132e8160808501610168565b9260a081013567ffffffffffffffff8111610102578261134f9183016112ae565b9261012a6113608460c085016112d2565b9361136e8160e08601610168565b9361010001610168565b9061141761140861140861103361012a94611391610c27565b506114086113c26113a0610c27565b9889936113ba60006113b181611148565b60ff1690870152565b8101906112df565b94929c95979d939060408b9c93989c019d60608c019b611413608082019a60a083019961140b60c085019660e08601956114086101008201946101406101208401930152565b52565b9060ff169052565b5252565b6001600160a01b03169052565b90939293848311610102578411610102578101920390565b9092919261144c610bb082610b8b565b938185526020808601920283019281841161010257915b8383106114705750505050565b6020809161147e84866101cf565b815201920191611463565b9080601f830112156101025781602061012a9335910161143c565b919061016083820312610102576114bb8184610168565b926114c98260208301610168565b926114d78360408401610168565b926114e58160608501610168565b926114f382608083016101cf565b926115018360a08401610168565b9260c083013567ffffffffffffffff811161010257816115229185016112ae565b9260e081013567ffffffffffffffff81116101025782611543918301611489565b9261012a6115558461010085016112d2565b93611564816101208601610168565b9361014001610168565b611576610c27565b5061157f610c27565b9180600161158c81611148565b60ff16855261159a9061034e565b906115a493611424565b81016115af916114a4565b9160208c9b9a989497929599969b019a60408d01998d6060810199608082019860a083019760c084019660e08501946101a081019361010082019361012083019261014001906115fc9152565b6116039152565b60ff16905252526116119152565b61161a90610498565b6001600160a01b031690525b61162d9152565b6116349152565b61163b9152565b61012a9152565b909161018082840312610102576116598383610168565b926116678160208501610168565b926116758260408301610168565b926116838360608401610168565b926116918160808501610168565b9261169f8260a083016101cf565b926116ad8360c08401610168565b9260e083013567ffffffffffffffff811161010257816116ce9185016112ae565b9261010081013567ffffffffffffffff811161010257826116f0918301611489565b9261012a6117028461012085016112d2565b93611711816101408601610168565b9361016001610168565b90611724610c27565b5061172d610c27565b91829161173a6002611148565b60ff1683528061174a600161034e565b9061175493611424565b810161175f91611642565b6101408d015260208c019b604081019a99610160820199909861018083019891976080840197919660a0850196939560c0860195929460e08401936101a08101926101008201929161012001906117b39152565b60ff16905252526117c19152565b6117ca90610498565b6001600160a01b03169052611626915256fea2646970667358221220b8ff3cf3247a12d054de35f2950617cc72e1a0c6e90f9eebcd928df1a78d874b64736f6c63430008140033", +} + +// SystemDeployerABI is the input ABI used to generate the binding from. +// Deprecated: Use SystemDeployerMetaData.ABI instead. +var SystemDeployerABI = SystemDeployerMetaData.ABI + +// SystemDeployerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SystemDeployerMetaData.Bin instead. +var SystemDeployerBin = SystemDeployerMetaData.Bin + +// DeploySystemDeployer deploys a new Ethereum contract, binding an instance of SystemDeployer to it. +func DeploySystemDeployer(auth *bind.TransactOpts, backend bind.ContractBackend, eoaAdmin common.Address) (common.Address, *types.Transaction, *SystemDeployer, error) { + parsed, err := SystemDeployerMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemDeployerBin), backend, eoaAdmin) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SystemDeployer{SystemDeployerCaller: SystemDeployerCaller{contract: contract}, SystemDeployerTransactor: SystemDeployerTransactor{contract: contract}, SystemDeployerFilterer: SystemDeployerFilterer{contract: contract}}, nil +} + +// SystemDeployer is an auto generated Go binding around an Ethereum contract. +type SystemDeployer struct { + SystemDeployerCaller // Read-only binding to the contract + SystemDeployerTransactor // Write-only binding to the contract + SystemDeployerFilterer // Log filterer for contract events +} + +// SystemDeployerCaller is an auto generated read-only Go binding around an Ethereum contract. +type SystemDeployerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SystemDeployerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SystemDeployerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SystemDeployerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SystemDeployerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SystemDeployerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SystemDeployerSession struct { + Contract *SystemDeployer // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SystemDeployerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SystemDeployerCallerSession struct { + Contract *SystemDeployerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SystemDeployerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SystemDeployerTransactorSession struct { + Contract *SystemDeployerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SystemDeployerRaw is an auto generated low-level Go binding around an Ethereum contract. +type SystemDeployerRaw struct { + Contract *SystemDeployer // Generic contract binding to access the raw methods on +} + +// SystemDeployerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SystemDeployerCallerRaw struct { + Contract *SystemDeployerCaller // Generic read-only contract binding to access the raw methods on +} + +// SystemDeployerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SystemDeployerTransactorRaw struct { + Contract *SystemDeployerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSystemDeployer creates a new instance of SystemDeployer, bound to a specific deployed contract. +func NewSystemDeployer(address common.Address, backend bind.ContractBackend) (*SystemDeployer, error) { + contract, err := bindSystemDeployer(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SystemDeployer{SystemDeployerCaller: SystemDeployerCaller{contract: contract}, SystemDeployerTransactor: SystemDeployerTransactor{contract: contract}, SystemDeployerFilterer: SystemDeployerFilterer{contract: contract}}, nil +} + +// NewSystemDeployerCaller creates a new read-only instance of SystemDeployer, bound to a specific deployed contract. +func NewSystemDeployerCaller(address common.Address, caller bind.ContractCaller) (*SystemDeployerCaller, error) { + contract, err := bindSystemDeployer(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SystemDeployerCaller{contract: contract}, nil +} + +// NewSystemDeployerTransactor creates a new write-only instance of SystemDeployer, bound to a specific deployed contract. +func NewSystemDeployerTransactor(address common.Address, transactor bind.ContractTransactor) (*SystemDeployerTransactor, error) { + contract, err := bindSystemDeployer(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SystemDeployerTransactor{contract: contract}, nil +} + +// NewSystemDeployerFilterer creates a new log filterer instance of SystemDeployer, bound to a specific deployed contract. +func NewSystemDeployerFilterer(address common.Address, filterer bind.ContractFilterer) (*SystemDeployerFilterer, error) { + contract, err := bindSystemDeployer(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SystemDeployerFilterer{contract: contract}, nil +} + +// bindSystemDeployer binds a generic wrapper to an already deployed contract. +func bindSystemDeployer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := SystemDeployerMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SystemDeployer *SystemDeployerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SystemDeployer.Contract.SystemDeployerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SystemDeployer *SystemDeployerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SystemDeployer.Contract.SystemDeployerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SystemDeployer *SystemDeployerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SystemDeployer.Contract.SystemDeployerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SystemDeployer *SystemDeployerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SystemDeployer.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SystemDeployer *SystemDeployerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SystemDeployer.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SystemDeployer *SystemDeployerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SystemDeployer.Contract.contract.Transact(opts, method, params...) +} + +// SystemDeployerSystemContractDeployedIterator is returned from FilterSystemContractDeployed and is used to iterate over the raw logs and unpacked data for SystemContractDeployed events raised by the SystemDeployer contract. +type SystemDeployerSystemContractDeployedIterator struct { + Event *SystemDeployerSystemContractDeployed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SystemDeployerSystemContractDeployedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SystemDeployerSystemContractDeployed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SystemDeployerSystemContractDeployed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SystemDeployerSystemContractDeployedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SystemDeployerSystemContractDeployedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SystemDeployerSystemContractDeployed represents a SystemContractDeployed event raised by the SystemDeployer contract. +type SystemDeployerSystemContractDeployed struct { + Name string + ContractAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSystemContractDeployed is a free log retrieval operation binding the contract event 0xbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69. +// +// Solidity: event SystemContractDeployed(string name, address contractAddress) +func (_SystemDeployer *SystemDeployerFilterer) FilterSystemContractDeployed(opts *bind.FilterOpts) (*SystemDeployerSystemContractDeployedIterator, error) { + + logs, sub, err := _SystemDeployer.contract.FilterLogs(opts, "SystemContractDeployed") + if err != nil { + return nil, err + } + return &SystemDeployerSystemContractDeployedIterator{contract: _SystemDeployer.contract, event: "SystemContractDeployed", logs: logs, sub: sub}, nil +} + +// WatchSystemContractDeployed is a free log subscription operation binding the contract event 0xbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69. +// +// Solidity: event SystemContractDeployed(string name, address contractAddress) +func (_SystemDeployer *SystemDeployerFilterer) WatchSystemContractDeployed(opts *bind.WatchOpts, sink chan<- *SystemDeployerSystemContractDeployed) (event.Subscription, error) { + + logs, sub, err := _SystemDeployer.contract.WatchLogs(opts, "SystemContractDeployed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SystemDeployerSystemContractDeployed) + if err := _SystemDeployer.contract.UnpackLog(event, "SystemContractDeployed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSystemContractDeployed is a log parse operation binding the contract event 0xbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69. +// +// Solidity: event SystemContractDeployed(string name, address contractAddress) +func (_SystemDeployer *SystemDeployerFilterer) ParseSystemContractDeployed(log types.Log) (*SystemDeployerSystemContractDeployed, error) { + event := new(SystemDeployerSystemContractDeployed) + if err := _SystemDeployer.contract.UnpackLog(event, "SystemContractDeployed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/generated/TransactionDecoder/TransactionDecoder.go b/contracts/generated/TransactionDecoder/TransactionDecoder.go new file mode 100644 index 0000000000..c815983c71 --- /dev/null +++ b/contracts/generated/TransactionDecoder/TransactionDecoder.go @@ -0,0 +1,252 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package TransactionDecoder + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// TransactionDecoderTransaction is an auto generated low-level Go binding around an user-defined struct. +type TransactionDecoderTransaction struct { + TxType uint8 + ChainId *big.Int + Nonce *big.Int + GasPrice *big.Int + GasLimit *big.Int + To common.Address + Value *big.Int + Data []byte + V uint8 + R [32]byte + S [32]byte + MaxPriorityFeePerGas *big.Int + MaxFeePerGas *big.Int + AccessList []common.Address +} + +// TransactionDecoderMetaData contains all meta data concerning the TransactionDecoder contract. +var TransactionDecoderMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"accessList\",\"type\":\"address[]\"}],\"internalType\":\"structTransactionDecoder.Transaction\",\"name\":\"txData\",\"type\":\"tuple\"}],\"name\":\"recoverSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x60806040523461001e5760405161069e61002482393081505061069e90f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63fe7fbd180361003657610072565b90816101c09103126100365790565b600080fd5b9060208282031261003657813567ffffffffffffffff8111610036576100619201610027565b90565b6001600160a01b031690565b565b6100a261008861008336600461003b565b6102b6565b604051918291826001600160a01b03909116815260200190565b0390f35b60ff81165b0361003657565b35610061816100a6565b806100ab565b35610061816100bc565b6001600160a01b0381166100ab565b35610061816100cc565b903590601e193682900301821215610036570180359067ffffffffffffffff8211610036576020019136829003831361003657565b903590601e193682900301821215610036570180359067ffffffffffffffff82116100365760200191602082023603831361003657565b90826000939282370152565b919061017b81610174816101859560209181520190565b8095610151565b601f01601f191690565b0190565b90503590610070826100cc565b50610061906020810190610189565b818352602090920191906000825b8282106101c1575050505090565b909192936101f06101e96001926101d88886610196565b6001600160a01b0316815260200190565b9560200190565b939201906101b3565b999b9c9a9895939196949290966101608b019760008c0161021b9160ff169052565b60208b015260408a0152606089015260808801526001600160a01b031660a087015260c086015284820360e08601526102539261015d565b936101008301610261919052565b610120820152808303906101400152610061926101a5565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff8211176102b157604052565b610279565b6102bf816100b2565b6102cb602083016100c2565b6102d7604084016100c2565b906102e4606085016100c2565b926102f1608086016100c2565b6102fd60a087016100db565b9061030a60c088016100c2565b61031760e08901896100e5565b6103246101608b016100c2565b916103326101808c016100c2565b936103416101a08d018d61011a565b97909661034d60405190565b9c8d9c60208e019c61035f9c8e6101f9565b90810382520361036f908261028f565b805190602001206103a9907f19457468657265756d205369676e6564204d6573736167653a0a333200000000600052601c52603c60002090565b906103b761010082016100b2565b906103c561012082016100c2565b90610140016103d3906100c2565b6100619384936103e39391610458565b90929192610550565b6100616100616100619290565b610061906103ec565b6100646100616100619290565b61006190610402565b61044861007094610441606094989795610437608086019a6000870152565b60ff166020850152565b6040830152565b0152565b6040513d6000823e3d90fd5b9091610463846103f9565b61049361048f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a06103ec565b9190565b1161050d57906104b5602094600094936104ac60405190565b94859485610418565b838052039060015afa15610508576000516000916104d28361040f565b6001600160a01b0381166001600160a01b038416146104fb57506104f5836103ec565b91929190565b91506104f56001936103ec565b61044c565b50505061051a600061040f565b9160039190565b634e487b7160e01b600052602160045260246000fd5b6004111561054157565b610521565b9061007082610537565b61055a6000610546565b61056382610546565b0361056c575050565b6105766001610546565b61057f82610546565b036105b3576040517ff645eedf000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b6105bd6002610546565b6105c682610546565b0361060d576105af6105d7836103f9565b6040519182917ffce698f70000000000000000000000000000000000000000000000000000000083526004830190815260200190565b61062061061a6003610546565b91610546565b146106285750565b6105af9061063560405190565b9182917fd78bce0c000000000000000000000000000000000000000000000000000000008352600483019081526020019056fea26469706673582212207685a34f7ab7c0720815e0d0c34b60bc2c846ea69d5859ef98002e1536e3525064736f6c63430008140033", +} + +// TransactionDecoderABI is the input ABI used to generate the binding from. +// Deprecated: Use TransactionDecoderMetaData.ABI instead. +var TransactionDecoderABI = TransactionDecoderMetaData.ABI + +// TransactionDecoderBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use TransactionDecoderMetaData.Bin instead. +var TransactionDecoderBin = TransactionDecoderMetaData.Bin + +// DeployTransactionDecoder deploys a new Ethereum contract, binding an instance of TransactionDecoder to it. +func DeployTransactionDecoder(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *TransactionDecoder, error) { + parsed, err := TransactionDecoderMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TransactionDecoderBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &TransactionDecoder{TransactionDecoderCaller: TransactionDecoderCaller{contract: contract}, TransactionDecoderTransactor: TransactionDecoderTransactor{contract: contract}, TransactionDecoderFilterer: TransactionDecoderFilterer{contract: contract}}, nil +} + +// TransactionDecoder is an auto generated Go binding around an Ethereum contract. +type TransactionDecoder struct { + TransactionDecoderCaller // Read-only binding to the contract + TransactionDecoderTransactor // Write-only binding to the contract + TransactionDecoderFilterer // Log filterer for contract events +} + +// TransactionDecoderCaller is an auto generated read-only Go binding around an Ethereum contract. +type TransactionDecoderCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TransactionDecoderTransactor is an auto generated write-only Go binding around an Ethereum contract. +type TransactionDecoderTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TransactionDecoderFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type TransactionDecoderFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TransactionDecoderSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type TransactionDecoderSession struct { + Contract *TransactionDecoder // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TransactionDecoderCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type TransactionDecoderCallerSession struct { + Contract *TransactionDecoderCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// TransactionDecoderTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type TransactionDecoderTransactorSession struct { + Contract *TransactionDecoderTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TransactionDecoderRaw is an auto generated low-level Go binding around an Ethereum contract. +type TransactionDecoderRaw struct { + Contract *TransactionDecoder // Generic contract binding to access the raw methods on +} + +// TransactionDecoderCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type TransactionDecoderCallerRaw struct { + Contract *TransactionDecoderCaller // Generic read-only contract binding to access the raw methods on +} + +// TransactionDecoderTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type TransactionDecoderTransactorRaw struct { + Contract *TransactionDecoderTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewTransactionDecoder creates a new instance of TransactionDecoder, bound to a specific deployed contract. +func NewTransactionDecoder(address common.Address, backend bind.ContractBackend) (*TransactionDecoder, error) { + contract, err := bindTransactionDecoder(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &TransactionDecoder{TransactionDecoderCaller: TransactionDecoderCaller{contract: contract}, TransactionDecoderTransactor: TransactionDecoderTransactor{contract: contract}, TransactionDecoderFilterer: TransactionDecoderFilterer{contract: contract}}, nil +} + +// NewTransactionDecoderCaller creates a new read-only instance of TransactionDecoder, bound to a specific deployed contract. +func NewTransactionDecoderCaller(address common.Address, caller bind.ContractCaller) (*TransactionDecoderCaller, error) { + contract, err := bindTransactionDecoder(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &TransactionDecoderCaller{contract: contract}, nil +} + +// NewTransactionDecoderTransactor creates a new write-only instance of TransactionDecoder, bound to a specific deployed contract. +func NewTransactionDecoderTransactor(address common.Address, transactor bind.ContractTransactor) (*TransactionDecoderTransactor, error) { + contract, err := bindTransactionDecoder(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &TransactionDecoderTransactor{contract: contract}, nil +} + +// NewTransactionDecoderFilterer creates a new log filterer instance of TransactionDecoder, bound to a specific deployed contract. +func NewTransactionDecoderFilterer(address common.Address, filterer bind.ContractFilterer) (*TransactionDecoderFilterer, error) { + contract, err := bindTransactionDecoder(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &TransactionDecoderFilterer{contract: contract}, nil +} + +// bindTransactionDecoder binds a generic wrapper to an already deployed contract. +func bindTransactionDecoder(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := TransactionDecoderMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TransactionDecoder *TransactionDecoderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TransactionDecoder.Contract.TransactionDecoderCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TransactionDecoder *TransactionDecoderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TransactionDecoder.Contract.TransactionDecoderTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TransactionDecoder *TransactionDecoderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TransactionDecoder.Contract.TransactionDecoderTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TransactionDecoder *TransactionDecoderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TransactionDecoder.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TransactionDecoder *TransactionDecoderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TransactionDecoder.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TransactionDecoder *TransactionDecoderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TransactionDecoder.Contract.contract.Transact(opts, method, params...) +} + +// RecoverSender is a free data retrieval call binding the contract method 0x23bc02dd. +// +// Solidity: function recoverSender((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[]) txData) pure returns(address sender) +func (_TransactionDecoder *TransactionDecoderCaller) RecoverSender(opts *bind.CallOpts, txData TransactionDecoderTransaction) (common.Address, error) { + var out []interface{} + err := _TransactionDecoder.contract.Call(opts, &out, "recoverSender", txData) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// RecoverSender is a free data retrieval call binding the contract method 0x23bc02dd. +// +// Solidity: function recoverSender((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[]) txData) pure returns(address sender) +func (_TransactionDecoder *TransactionDecoderSession) RecoverSender(txData TransactionDecoderTransaction) (common.Address, error) { + return _TransactionDecoder.Contract.RecoverSender(&_TransactionDecoder.CallOpts, txData) +} + +// RecoverSender is a free data retrieval call binding the contract method 0x23bc02dd. +// +// Solidity: function recoverSender((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[]) txData) pure returns(address sender) +func (_TransactionDecoder *TransactionDecoderCallerSession) RecoverSender(txData TransactionDecoderTransaction) (common.Address, error) { + return _TransactionDecoder.Contract.RecoverSender(&_TransactionDecoder.CallOpts, txData) +} diff --git a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go b/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go new file mode 100644 index 0000000000..f1693d866e --- /dev/null +++ b/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go @@ -0,0 +1,1140 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package TransactionsAnalyzer + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// TransactionsAnalyzerBlockTransactions is an auto generated low-level Go binding around an user-defined struct. +type TransactionsAnalyzerBlockTransactions struct { + Transactions [][]byte +} + +// TransactionsAnalyzerMetaData contains all meta data concerning the TransactionsAnalyzer contract. +var TransactionsAnalyzerMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes[]\",\"name\":\"transactions\",\"type\":\"bytes[]\"}],\"internalType\":\"structTransactionsAnalyzer.BlockTransactions\",\"name\":\"_block\",\"type\":\"tuple\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60806040523461001a57604051611812610020823961181290f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146100d2578063248a9ca3146100cd5780632f2ff15d146100c857806336568abe146100c3578063485cc955146100be578063508a50f4146100b95780635f03a661146100b457806391d14854146100af5780639dbbcf8e146100aa578063a217fddf146100a5578063d547741f146100a05763ee546fd803610102576103b5565b610388565b61036d565b610336565b6102e6565b6102ad565b610274565b610250565b61021d565b6101ff565b610189565b610131565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361010257565b600080fd5b90503590610114826100d7565b565b906020828203126101025761012a91610107565b90565b9052565b346101025761015e61014c610147366004610116565b6103cd565b60405191829182901515815260200190565b0390f35b806100fb565b9050359061011482610162565b906020828203126101025761012a91610168565b346101025761015e6101a461019f366004610175565b6104f0565b6040519182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166100fb565b90503590610114826101c0565b91906040838203126101025761012a906101f68185610168565b936020016101cf565b34610102576102186102123660046101dc565b90610532565b604051005b34610102576102186102303660046101dc565b906105e2565b91906040838203126101025761012a906101f681856101cf565b3461010257610218610263366004610236565b906109d3565b600091031261010257565b3461010257610284366004610269565b61015e7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5986101a4565b34610102576102bd366004610269565b61015e7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db6101a4565b346101025761015e61014c6102fc3660046101dc565b906104c0565b908160209103126101025790565b9060208282031261010257813567ffffffffffffffff81116101025761012a9201610302565b3461010257610218610349366004610310565b6110ca565b61012a61012a61012a9290565b61012a600061034e565b61012a61035b565b346101025761037d366004610269565b61015e6101a4610365565b346101025761021861039b3660046101dc565b906105d8565b906020828203126101025761012a916101cf565b34610102576102186103c83660046103a1565b610ae3565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082161490811561041d575090565b61012a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101b461012a61012a926001600160a01b031690565b61012a90610479565b61012a9061048f565b9061046b90610498565b61012a905b60ff1690565b61012a90546104ab565b61012a916104da916104d460009182610469565b016104a1565b6104b6565b61012a9081565b61012a90546104df565b600161050961012a92610501600090565b506000610469565b016104e6565b9061011491610525610520826104f0565b61053c565b9061052f91610659565b50565b906101149161050f565b610114903390610564565b6001600160a01b0390911681526040810192916101149160200152565b9061057661057282846104c0565b1590565b61057e575050565b6105b961058a60405190565b9283927fe2517d3f00000000000000000000000000000000000000000000000000000000845260048401610547565b0390fd5b90610114916105ce610520826104f0565b9061052f916106d5565b90610114916105bd565b906105ec336101b4565b6001600160a01b038216036106045761052f916106d5565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061064e61012a61065592151590565b825461062f565b9055565b61066661057283836104c0565b156106ce57600191610687836106828360006104d48782610469565b61063e565b33906106bd6106b76106b77f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b92610498565b926106c760405190565b600090a490565b5050600090565b906106e081836104c0565b156106ce576106f9600061068283826104d48782610469565b33906107296106b76106b77ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261073360405190565b600090a4600190565b61012a9060401c6104b0565b61012a905461073c565b61012a905b67ffffffffffffffff1690565b61012a9054610752565b61075761012a61012a9290565b9067ffffffffffffffff90610634565b61075761012a61012a9267ffffffffffffffff1690565b906107b261012a6106559261078b565b825461077b565b9068ff00000000000000009060401b610634565b906107dd61012a61065592151590565b82546107b9565b61012d9061076e565b60208101929161011491906107e4565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00908161083661083061057283610748565b91610764565b936000926108438461076e565b67ffffffffffffffff87161480610965575b6001966108726108648961076e565b9167ffffffffffffffff1690565b14908161093d575b155b9081610934575b50610909576108ac91836108a38661089a8a61076e565b980197886107a2565b6108fa5761096c565b6108b557505050565b6108be916107cd565b6108f57fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916108ec60405190565b918291826107ed565b0390a1565b61090487876107cd565b61096c565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b15905038610883565b905061087c61094b30610498565b3b61095c6109588861034e565b9190565b1491905061087a565b5082610855565b906109ac61052f926109858161098061035b565b610659565b507ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598610659565b507f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610659565b90610114916107fd565b61011490610a0a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59861053c565b610ace565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8054821015610a5e57610a55600191600052602060002090565b91020190600090565b610a25565b91906008610634910291610a7d6001600160a01b03841b90565b921b90565b9190610a9361012a61065593610498565b908354610a63565b9081549168010000000000000000831015610ac95782610ac391600161011495018155610a3b565b90610a82565b610a0f565b61011490610add600191610498565b90610a9b565b610114906109dd565b61011490610b197f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db61053c565b610f59565b903590601e193682900301821215610102570180359067ffffffffffffffff82116101025760200191602082023603831361010257565b90601f01601f1916810190811067ffffffffffffffff821117610ac957604052565b90610114610b8460405190565b9283610b55565b67ffffffffffffffff8111610ac95760208091020190565b90610bb5610bb083610b8b565b610b77565b918252565b61012a6101c0610b77565b60209081808080808080808080808080610bdd610bba565b9e8f60008152016000815201600081520160008152016000815201600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b61012a610bc5565b60005b828110610c3e57505050565b602090610c49610c27565b8184015201610c32565b90610114610c69610c6384610ba3565b93610b8b565b601f190160208401610c2f565b634e487b7160e01b600052601160045260246000fd5b6000198114610c9b5760010190565b610c76565b903590601e193682900301821215610102570180359067ffffffffffffffff8211610102576020019136829003831361010257565b90821015610a5e576020610cec9202810190610ca0565b9091565b90610cf9825190565b811015610a5e576020809102010190565b61012a916008021c6101b4565b9061012a9154610d0a565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b610d66610d6f602093610d7993610d5a815190565b80835293849260200190565b95869101610d22565b601f01601f191690565b0190565b90610d9d610d96610d8c845190565b8084529260200190565b9260200190565b9060005b818110610dae5750505090565b909192610dd4610dcd60019286516001600160a01b0316815260200190565b9460200190565b929101610da1565b805160ff16825261012a916101a0610e626101c08301610e0160208601516020860152565b610e1060408601516040860152565b610e1f60608601516060860152565b610e2e60808601516080860152565b60a0858101516001600160a01b031690850152610e5060c086015160c0860152565b60e085015184820360e0860152610d45565b6101008085015160ff169084015292610e82610120820151610120850152565b610e93610140820151610140850152565b610ea4610160820151610160850152565b610eb5610180820151610180850152565b0151906101a0818403910152610d7d565b9061012a91610ddc565b90610ee6610edc835190565b8083529160200190565b9081610ef86020830284019460200190565b926000915b838310610f0c57505050505090565b90919293946020610f2f610f2883856001950387528951610ec6565b9760200190565b9301930191939290610efd565b602080825261012a92910190610ed0565b6040513d6000823e3d90fd5b610f6b610f668280610b1e565b905090565b90600091610f7b6109588461034e565b146110c65781810190610f99610f94610f668484610b1e565b610c53565b93610fa38461034e565b610fb361012a610f668686610b1e565b811015610ffb5780610fdb610fd5610ff693610fcf8888610b1e565b90610cd5565b90611155565b610fe58289610cf0565b52610ff08188610cf0565b50610c8c565b610fa3565b50929150506110098161034e565b600161101661012a825490565b8210156110bf5761103361102d8361103893610a3b565b90610d17565b610498565b9063630ac52c91803b156101025761105e92849161105560405190565b94859260e01b90565b82528183816110708b60048301610f3c565b03925af19182156110ba576110899261108e5750610c8c565b611009565b6110ad90843d86116110b3575b6110a58183610b55565b810190610269565b38610ff0565b503d61109b565b610f4d565b5050509050565b5050565b61011490610aec565b156110da57565b60405162461bcd60e51b815260206004820152601660248201527f456d707479207472616e73616374696f6e2064617461000000000000000000006044820152606490fd5b9190811015610a5e570190565b6104b061012a61012a9260ff1690565b61012a9060f81c61112c565b6104b061012a61012a9290565b9061115e610c27565b506000611177826111716109588461034e565b116110d3565b6111c46111be6111b961119361118c8561034e565b868861111f565b357fff000000000000000000000000000000000000000000000000000000000000001690565b61113c565b91611148565b60ff8216036111d7575061012a91611378565b6111e16001611148565b60ff8216036111f4575061012a9161156e565b6112086112016002611148565b9160ff1690565b036112165761012a9161171b565b60405162461bcd60e51b815260206004820152601c60248201527f556e737570706f72746564207472616e73616374696f6e2074797065000000006044820152606490fd5b67ffffffffffffffff8111610ac957602090601f01601f19160190565b90826000939282370152565b90929192611294610bb08261125b565b938185526020850190828401116101025761011492611278565b9080601f830112156101025781602061012a93359101611284565b60ff81166100fb565b90503590610114826112c9565b909161012082840312610102576112f68383610168565b926113048160208501610168565b926113128260408301610168565b9261132083606084016101cf565b9261132e8160808501610168565b9260a081013567ffffffffffffffff8111610102578261134f9183016112ae565b9261012a6113608460c085016112d2565b9361136e8160e08601610168565b9361010001610168565b9061141761140861140861103361012a94611391610c27565b506114086113c26113a0610c27565b9889936113ba60006113b181611148565b60ff1690870152565b8101906112df565b94929c95979d939060408b9c93989c019d60608c019b611413608082019a60a083019961140b60c085019660e08601956114086101008201946101406101208401930152565b52565b9060ff169052565b5252565b6001600160a01b03169052565b90939293848311610102578411610102578101920390565b9092919261144c610bb082610b8b565b938185526020808601920283019281841161010257915b8383106114705750505050565b6020809161147e84866101cf565b815201920191611463565b9080601f830112156101025781602061012a9335910161143c565b919061016083820312610102576114bb8184610168565b926114c98260208301610168565b926114d78360408401610168565b926114e58160608501610168565b926114f382608083016101cf565b926115018360a08401610168565b9260c083013567ffffffffffffffff811161010257816115229185016112ae565b9260e081013567ffffffffffffffff81116101025782611543918301611489565b9261012a6115558461010085016112d2565b93611564816101208601610168565b9361014001610168565b611576610c27565b5061157f610c27565b9180600161158c81611148565b60ff16855261159a9061034e565b906115a493611424565b81016115af916114a4565b9160208c9b9a989497929599969b019a60408d01998d6060810199608082019860a083019760c084019660e08501946101a081019361010082019361012083019261014001906115fc9152565b6116039152565b60ff16905252526116119152565b61161a90610498565b6001600160a01b031690525b61162d9152565b6116349152565b61163b9152565b61012a9152565b909161018082840312610102576116598383610168565b926116678160208501610168565b926116758260408301610168565b926116838360608401610168565b926116918160808501610168565b9261169f8260a083016101cf565b926116ad8360c08401610168565b9260e083013567ffffffffffffffff811161010257816116ce9185016112ae565b9261010081013567ffffffffffffffff811161010257826116f0918301611489565b9261012a6117028461012085016112d2565b93611711816101408601610168565b9361016001610168565b90611724610c27565b5061172d610c27565b91829161173a6002611148565b60ff1683528061174a600161034e565b9061175493611424565b810161175f91611642565b6101408d015260208c019b604081019a99610160820199909861018083019891976080840197919660a0850196939560c0860195929460e08401936101a08101926101008201929161012001906117b39152565b60ff16905252526117c19152565b6117ca90610498565b6001600160a01b03169052611626915256fea2646970667358221220b8ff3cf3247a12d054de35f2950617cc72e1a0c6e90f9eebcd928df1a78d874b64736f6c63430008140033", +} + +// TransactionsAnalyzerABI is the input ABI used to generate the binding from. +// Deprecated: Use TransactionsAnalyzerMetaData.ABI instead. +var TransactionsAnalyzerABI = TransactionsAnalyzerMetaData.ABI + +// TransactionsAnalyzerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use TransactionsAnalyzerMetaData.Bin instead. +var TransactionsAnalyzerBin = TransactionsAnalyzerMetaData.Bin + +// DeployTransactionsAnalyzer deploys a new Ethereum contract, binding an instance of TransactionsAnalyzer to it. +func DeployTransactionsAnalyzer(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *TransactionsAnalyzer, error) { + parsed, err := TransactionsAnalyzerMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TransactionsAnalyzerBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &TransactionsAnalyzer{TransactionsAnalyzerCaller: TransactionsAnalyzerCaller{contract: contract}, TransactionsAnalyzerTransactor: TransactionsAnalyzerTransactor{contract: contract}, TransactionsAnalyzerFilterer: TransactionsAnalyzerFilterer{contract: contract}}, nil +} + +// TransactionsAnalyzer is an auto generated Go binding around an Ethereum contract. +type TransactionsAnalyzer struct { + TransactionsAnalyzerCaller // Read-only binding to the contract + TransactionsAnalyzerTransactor // Write-only binding to the contract + TransactionsAnalyzerFilterer // Log filterer for contract events +} + +// TransactionsAnalyzerCaller is an auto generated read-only Go binding around an Ethereum contract. +type TransactionsAnalyzerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TransactionsAnalyzerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type TransactionsAnalyzerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TransactionsAnalyzerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type TransactionsAnalyzerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TransactionsAnalyzerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type TransactionsAnalyzerSession struct { + Contract *TransactionsAnalyzer // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TransactionsAnalyzerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type TransactionsAnalyzerCallerSession struct { + Contract *TransactionsAnalyzerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// TransactionsAnalyzerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type TransactionsAnalyzerTransactorSession struct { + Contract *TransactionsAnalyzerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TransactionsAnalyzerRaw is an auto generated low-level Go binding around an Ethereum contract. +type TransactionsAnalyzerRaw struct { + Contract *TransactionsAnalyzer // Generic contract binding to access the raw methods on +} + +// TransactionsAnalyzerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type TransactionsAnalyzerCallerRaw struct { + Contract *TransactionsAnalyzerCaller // Generic read-only contract binding to access the raw methods on +} + +// TransactionsAnalyzerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type TransactionsAnalyzerTransactorRaw struct { + Contract *TransactionsAnalyzerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewTransactionsAnalyzer creates a new instance of TransactionsAnalyzer, bound to a specific deployed contract. +func NewTransactionsAnalyzer(address common.Address, backend bind.ContractBackend) (*TransactionsAnalyzer, error) { + contract, err := bindTransactionsAnalyzer(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &TransactionsAnalyzer{TransactionsAnalyzerCaller: TransactionsAnalyzerCaller{contract: contract}, TransactionsAnalyzerTransactor: TransactionsAnalyzerTransactor{contract: contract}, TransactionsAnalyzerFilterer: TransactionsAnalyzerFilterer{contract: contract}}, nil +} + +// NewTransactionsAnalyzerCaller creates a new read-only instance of TransactionsAnalyzer, bound to a specific deployed contract. +func NewTransactionsAnalyzerCaller(address common.Address, caller bind.ContractCaller) (*TransactionsAnalyzerCaller, error) { + contract, err := bindTransactionsAnalyzer(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &TransactionsAnalyzerCaller{contract: contract}, nil +} + +// NewTransactionsAnalyzerTransactor creates a new write-only instance of TransactionsAnalyzer, bound to a specific deployed contract. +func NewTransactionsAnalyzerTransactor(address common.Address, transactor bind.ContractTransactor) (*TransactionsAnalyzerTransactor, error) { + contract, err := bindTransactionsAnalyzer(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &TransactionsAnalyzerTransactor{contract: contract}, nil +} + +// NewTransactionsAnalyzerFilterer creates a new log filterer instance of TransactionsAnalyzer, bound to a specific deployed contract. +func NewTransactionsAnalyzerFilterer(address common.Address, filterer bind.ContractFilterer) (*TransactionsAnalyzerFilterer, error) { + contract, err := bindTransactionsAnalyzer(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &TransactionsAnalyzerFilterer{contract: contract}, nil +} + +// bindTransactionsAnalyzer binds a generic wrapper to an already deployed contract. +func bindTransactionsAnalyzer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := TransactionsAnalyzerMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TransactionsAnalyzer *TransactionsAnalyzerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TransactionsAnalyzer.Contract.TransactionsAnalyzerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TransactionsAnalyzer *TransactionsAnalyzerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.TransactionsAnalyzerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TransactionsAnalyzer *TransactionsAnalyzerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.TransactionsAnalyzerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TransactionsAnalyzer *TransactionsAnalyzerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TransactionsAnalyzer.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _TransactionsAnalyzer.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _TransactionsAnalyzer.Contract.DEFAULTADMINROLE(&_TransactionsAnalyzer.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_TransactionsAnalyzer *TransactionsAnalyzerCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _TransactionsAnalyzer.Contract.DEFAULTADMINROLE(&_TransactionsAnalyzer.CallOpts) +} + +// EOAADMINROLE is a free data retrieval call binding the contract method 0x508a50f4. +// +// Solidity: function EOA_ADMIN_ROLE() view returns(bytes32) +func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) EOAADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _TransactionsAnalyzer.contract.Call(opts, &out, "EOA_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// EOAADMINROLE is a free data retrieval call binding the contract method 0x508a50f4. +// +// Solidity: function EOA_ADMIN_ROLE() view returns(bytes32) +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) EOAADMINROLE() ([32]byte, error) { + return _TransactionsAnalyzer.Contract.EOAADMINROLE(&_TransactionsAnalyzer.CallOpts) +} + +// EOAADMINROLE is a free data retrieval call binding the contract method 0x508a50f4. +// +// Solidity: function EOA_ADMIN_ROLE() view returns(bytes32) +func (_TransactionsAnalyzer *TransactionsAnalyzerCallerSession) EOAADMINROLE() ([32]byte, error) { + return _TransactionsAnalyzer.Contract.EOAADMINROLE(&_TransactionsAnalyzer.CallOpts) +} + +// HOOKCALLERROLE is a free data retrieval call binding the contract method 0x5f03a661. +// +// Solidity: function HOOK_CALLER_ROLE() view returns(bytes32) +func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) HOOKCALLERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _TransactionsAnalyzer.contract.Call(opts, &out, "HOOK_CALLER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// HOOKCALLERROLE is a free data retrieval call binding the contract method 0x5f03a661. +// +// Solidity: function HOOK_CALLER_ROLE() view returns(bytes32) +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) HOOKCALLERROLE() ([32]byte, error) { + return _TransactionsAnalyzer.Contract.HOOKCALLERROLE(&_TransactionsAnalyzer.CallOpts) +} + +// HOOKCALLERROLE is a free data retrieval call binding the contract method 0x5f03a661. +// +// Solidity: function HOOK_CALLER_ROLE() view returns(bytes32) +func (_TransactionsAnalyzer *TransactionsAnalyzerCallerSession) HOOKCALLERROLE() ([32]byte, error) { + return _TransactionsAnalyzer.Contract.HOOKCALLERROLE(&_TransactionsAnalyzer.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _TransactionsAnalyzer.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _TransactionsAnalyzer.Contract.GetRoleAdmin(&_TransactionsAnalyzer.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_TransactionsAnalyzer *TransactionsAnalyzerCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _TransactionsAnalyzer.Contract.GetRoleAdmin(&_TransactionsAnalyzer.CallOpts, role) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _TransactionsAnalyzer.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _TransactionsAnalyzer.Contract.HasRole(&_TransactionsAnalyzer.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_TransactionsAnalyzer *TransactionsAnalyzerCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _TransactionsAnalyzer.Contract.HasRole(&_TransactionsAnalyzer.CallOpts, role, account) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _TransactionsAnalyzer.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _TransactionsAnalyzer.Contract.SupportsInterface(&_TransactionsAnalyzer.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_TransactionsAnalyzer *TransactionsAnalyzerCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _TransactionsAnalyzer.Contract.SupportsInterface(&_TransactionsAnalyzer.CallOpts, interfaceId) +} + +// AddOnBlockEndCallback is a paid mutator transaction binding the contract method 0xee546fd8. +// +// Solidity: function addOnBlockEndCallback(address callbackAddress) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) AddOnBlockEndCallback(opts *bind.TransactOpts, callbackAddress common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.contract.Transact(opts, "addOnBlockEndCallback", callbackAddress) +} + +// AddOnBlockEndCallback is a paid mutator transaction binding the contract method 0xee546fd8. +// +// Solidity: function addOnBlockEndCallback(address callbackAddress) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) AddOnBlockEndCallback(callbackAddress common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.AddOnBlockEndCallback(&_TransactionsAnalyzer.TransactOpts, callbackAddress) +} + +// AddOnBlockEndCallback is a paid mutator transaction binding the contract method 0xee546fd8. +// +// Solidity: function addOnBlockEndCallback(address callbackAddress) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) AddOnBlockEndCallback(callbackAddress common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.AddOnBlockEndCallback(&_TransactionsAnalyzer.TransactOpts, callbackAddress) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.GrantRole(&_TransactionsAnalyzer.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.GrantRole(&_TransactionsAnalyzer.TransactOpts, role, account) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address eoaAdmin, address authorizedCaller) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) Initialize(opts *bind.TransactOpts, eoaAdmin common.Address, authorizedCaller common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.contract.Transact(opts, "initialize", eoaAdmin, authorizedCaller) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address eoaAdmin, address authorizedCaller) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) Initialize(eoaAdmin common.Address, authorizedCaller common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.Initialize(&_TransactionsAnalyzer.TransactOpts, eoaAdmin, authorizedCaller) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address eoaAdmin, address authorizedCaller) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) Initialize(eoaAdmin common.Address, authorizedCaller common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.Initialize(&_TransactionsAnalyzer.TransactOpts, eoaAdmin, authorizedCaller) +} + +// OnBlock is a paid mutator transaction binding the contract method 0x9dbbcf8e. +// +// Solidity: function onBlock((bytes[]) _block) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) OnBlock(opts *bind.TransactOpts, _block TransactionsAnalyzerBlockTransactions) (*types.Transaction, error) { + return _TransactionsAnalyzer.contract.Transact(opts, "onBlock", _block) +} + +// OnBlock is a paid mutator transaction binding the contract method 0x9dbbcf8e. +// +// Solidity: function onBlock((bytes[]) _block) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) OnBlock(_block TransactionsAnalyzerBlockTransactions) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.OnBlock(&_TransactionsAnalyzer.TransactOpts, _block) +} + +// OnBlock is a paid mutator transaction binding the contract method 0x9dbbcf8e. +// +// Solidity: function onBlock((bytes[]) _block) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) OnBlock(_block TransactionsAnalyzerBlockTransactions) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.OnBlock(&_TransactionsAnalyzer.TransactOpts, _block) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.contract.Transact(opts, "renounceRole", role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.RenounceRole(&_TransactionsAnalyzer.TransactOpts, role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.RenounceRole(&_TransactionsAnalyzer.TransactOpts, role, callerConfirmation) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.RevokeRole(&_TransactionsAnalyzer.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.RevokeRole(&_TransactionsAnalyzer.TransactOpts, role, account) +} + +// TransactionsAnalyzerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the TransactionsAnalyzer contract. +type TransactionsAnalyzerInitializedIterator struct { + Event *TransactionsAnalyzerInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TransactionsAnalyzerInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TransactionsAnalyzerInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TransactionsAnalyzerInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TransactionsAnalyzerInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TransactionsAnalyzerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TransactionsAnalyzerInitialized represents a Initialized event raised by the TransactionsAnalyzer contract. +type TransactionsAnalyzerInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterInitialized(opts *bind.FilterOpts) (*TransactionsAnalyzerInitializedIterator, error) { + + logs, sub, err := _TransactionsAnalyzer.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &TransactionsAnalyzerInitializedIterator{contract: _TransactionsAnalyzer.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *TransactionsAnalyzerInitialized) (event.Subscription, error) { + + logs, sub, err := _TransactionsAnalyzer.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TransactionsAnalyzerInitialized) + if err := _TransactionsAnalyzer.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) ParseInitialized(log types.Log) (*TransactionsAnalyzerInitialized, error) { + event := new(TransactionsAnalyzerInitialized) + if err := _TransactionsAnalyzer.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// TransactionsAnalyzerRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the TransactionsAnalyzer contract. +type TransactionsAnalyzerRoleAdminChangedIterator struct { + Event *TransactionsAnalyzerRoleAdminChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TransactionsAnalyzerRoleAdminChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TransactionsAnalyzerRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TransactionsAnalyzerRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TransactionsAnalyzerRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TransactionsAnalyzerRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TransactionsAnalyzerRoleAdminChanged represents a RoleAdminChanged event raised by the TransactionsAnalyzer contract. +type TransactionsAnalyzerRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*TransactionsAnalyzerRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _TransactionsAnalyzer.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &TransactionsAnalyzerRoleAdminChangedIterator{contract: _TransactionsAnalyzer.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *TransactionsAnalyzerRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _TransactionsAnalyzer.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TransactionsAnalyzerRoleAdminChanged) + if err := _TransactionsAnalyzer.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) ParseRoleAdminChanged(log types.Log) (*TransactionsAnalyzerRoleAdminChanged, error) { + event := new(TransactionsAnalyzerRoleAdminChanged) + if err := _TransactionsAnalyzer.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// TransactionsAnalyzerRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the TransactionsAnalyzer contract. +type TransactionsAnalyzerRoleGrantedIterator struct { + Event *TransactionsAnalyzerRoleGranted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TransactionsAnalyzerRoleGrantedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TransactionsAnalyzerRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TransactionsAnalyzerRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TransactionsAnalyzerRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TransactionsAnalyzerRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TransactionsAnalyzerRoleGranted represents a RoleGranted event raised by the TransactionsAnalyzer contract. +type TransactionsAnalyzerRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*TransactionsAnalyzerRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _TransactionsAnalyzer.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &TransactionsAnalyzerRoleGrantedIterator{contract: _TransactionsAnalyzer.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *TransactionsAnalyzerRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _TransactionsAnalyzer.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TransactionsAnalyzerRoleGranted) + if err := _TransactionsAnalyzer.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) ParseRoleGranted(log types.Log) (*TransactionsAnalyzerRoleGranted, error) { + event := new(TransactionsAnalyzerRoleGranted) + if err := _TransactionsAnalyzer.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// TransactionsAnalyzerRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the TransactionsAnalyzer contract. +type TransactionsAnalyzerRoleRevokedIterator struct { + Event *TransactionsAnalyzerRoleRevoked // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TransactionsAnalyzerRoleRevokedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TransactionsAnalyzerRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TransactionsAnalyzerRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TransactionsAnalyzerRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TransactionsAnalyzerRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TransactionsAnalyzerRoleRevoked represents a RoleRevoked event raised by the TransactionsAnalyzer contract. +type TransactionsAnalyzerRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*TransactionsAnalyzerRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _TransactionsAnalyzer.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &TransactionsAnalyzerRoleRevokedIterator{contract: _TransactionsAnalyzer.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *TransactionsAnalyzerRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _TransactionsAnalyzer.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TransactionsAnalyzerRoleRevoked) + if err := _TransactionsAnalyzer.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) ParseRoleRevoked(log types.Log) (*TransactionsAnalyzerRoleRevoked, error) { + event := new(TransactionsAnalyzerRoleRevoked) + if err := _TransactionsAnalyzer.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/generated/TransparentUpgradeableProxy/TransparentUpgradeableProxy.go b/contracts/generated/TransparentUpgradeableProxy/TransparentUpgradeableProxy.go new file mode 100644 index 0000000000..a6174dc287 --- /dev/null +++ b/contracts/generated/TransparentUpgradeableProxy/TransparentUpgradeableProxy.go @@ -0,0 +1,503 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package TransparentUpgradeableProxy + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// TransparentUpgradeableProxyMetaData contains all meta data concerning the TransparentUpgradeableProxy contract. +var TransparentUpgradeableProxyMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProxyDeniedAdminAccess\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}]", + Bin: "0x60a060405262000019620000126200019f565b91620001ff565b6040516105e762000681823960805181603001526105e790f35b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b03811603620000ab57565b600080fd5b90505190620000888262000099565b6001600160401b0381116200006b57602090601f01601f19160190565b60005b838110620000f05750506000910152565b8181015183820152602001620000df565b909291926200011a6200011482620000bf565b62000071565b93818552602085019082840111620000ab576200008892620000dc565b9080601f83011215620000ab578151620000969260200162000101565b91606083830312620000ab576200016c8284620000b0565b926200017c8360208301620000b0565b60408201519093906001600160401b038111620000ab5762000096920162000137565b620001c26200153080380380620001b68162000071565b92833981019062000154565b909192565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b6200009690620001d3565b6200009690620001e9565b916200020c919262000288565b604051906108c882016001600160401b038111838210176200006b5782916200024b916108c862000c6885396001600160a01b03909116815260200190565b03906000f0801562000282576200026290620001f4565b608052620000886200027c6080516001600160a01b031690565b62000406565b620001c7565b906200008891620002a4565b6200009662000096620000969290565b90620002b08262000381565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b620002dc83620001f4565b90620002e760405190565b600090a2805162000301620002fd600062000294565b9190565b111562000316576200031391620005a5565b50565b50506200008862000543565b620000967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc62000294565b9062000361620000966200037d92620001f4565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6000813b62000394620002fd8362000294565b14620003b557906200008891620003ae6200009662000322565b016200034d565b620003e882620003c460405190565b634c9c8ce360e01b8152918291600483016001600160a01b03909116815260200190565b0390fd5b6001600160a01b0391821681529116602082015260400190565b6200008890620004156200049b565b817f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91620004506200044660405190565b92839283620003ec565b0390a1620004d1565b620000967fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610362000294565b62000096906200008a565b62000096905462000484565b620000966000620004af6200009662000459565b016200048f565b6200008a62000096620000969290565b6200009690620004b6565b90600091620004e083620004c6565b926001600160a01b0384166001600160a01b03831614620005105762000088929350620003ae6200009662000459565b620003e8846200051f60405190565b633173bdd160e11b8152918291600483016001600160a01b03909116815260200190565b3462000554620002fd600062000294565b116200055c57565b60405163b398979f60e01b8152600490fd5b906200057e6200011483620000bf565b918252565b3d15620005a057620005953d6200056e565b903d6000602084013e565b606090565b6000806200009693620005b6606090565b50805190602001845af4620005ca62000583565b9190620005d857506200064d565b8151600090620005ec620002fd8362000294565b14908162000632575b50620005ff575090565b620003e8906200060e60405190565b639996b31560e01b8152918291600483016001600160a01b03909116815260200190565b905062000645620002fd833b9262000294565b1438620005f5565b80516200065f620002fd600062000294565b11156200066e57805190602001fd5b604051630a12f52160e11b8152600490fdfe608060405261000c61000e565b005b610016610027565b565b6001600160a01b031690565b90565b336100616100547f0000000000000000000000000000000000000000000000000000000000000000610018565b916001600160a01b031690565b036100e8577f4f1ef286000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060003516146100e0576040517fd2b576ec000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b6100166102ed565b6100f06100f5565b610156565b610024610140565b6100246100246100249290565b6100247f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6100fd565b546001600160a01b031690565b610024600061015061002461010a565b01610133565b60008091368280378136915af43d6000803e15610172573d6000f35b3d6000fd5b9093929384831161018f57841161018f578101920390565b600080fd5b6001600160a01b0381160361018f57565b9050359061001682610194565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761020357604052565b6101b2565b9061001661021560405190565b92836101e1565b67ffffffffffffffff811161020357602090601f01601f19160190565b90826000939282370152565b9092919261025a6102558261021c565b610208565b9381855260208501908284011161018f5761001692610239565b9080601f8301121561018f5781602061002493359101610245565b91909160408184031261018f576102a683826101a5565b92602082013567ffffffffffffffff811161018f576100249201610274565b610018610024610024926001600160a01b031690565b610024906102c5565b610024906102db565b61001661032361031c6103146103103660008161030a60046100fd565b91610177565b9091565b81019061028f565b91906102e4565b9061032d826103ef565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b610357836102e4565b9061036160405190565b600090a2805161037861037460006100fd565b9190565b111561038a57610387916104c7565b50565b5050610016610456565b6001600160a01b03909116815260200190565b906103b76100246103eb926102e4565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000813b6103ff610374836100fd565b1461041a57906100169161041461002461010a565b016103a7565b6100dc8261042760405190565b9182917f4c9c8ce300000000000000000000000000000000000000000000000000000000835260048301610394565b3461046461037460006100fd565b1161046b57565b6040517fb398979f000000000000000000000000000000000000000000000000000000008152600490fd5b906104a36102558361021c565b918252565b3d156104c2576104b73d610496565b903d6000602084013e565b606090565b600080610024936104d6606090565b50805190602001845af46104e86104a8565b91906104f45750610569565b8151600090610505610374836100fd565b149081610552575b50610516575090565b6100dc9061052360405190565b9182917f9996b31500000000000000000000000000000000000000000000000000000000835260048301610394565b9050610562610374833b926100fd565b143861050d565b805161057861037460006100fd565b111561058657805190602001fd5b6040517f1425ea42000000000000000000000000000000000000000000000000000000008152600490fdfea2646970667358221220782f2801dba6b92d163f770087c095f4a3bcf48f3a41dbeafc28edfa481d940f64736f6c6343000814003360806040523462000030576200001e62000018620000d3565b620000f6565b60405161066362000265823961066390f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003057565b905051906200008a826200009b565b9060208282031262000030576200009891620000ad565b62000098620008c880380380620000ea8162000073565b928339810190620000bc565b6200008a906200012f565b6200008c62000098620000989290565b620000989062000101565b6001600160a01b03909116815260200190565b6200013b600062000111565b6001600160a01b0381166001600160a01b038316146200016157506200008a9062000202565b62000187906200017060405190565b631e4fbdf760e01b8152918291600483016200011c565b0390fd5b62000098906200008c565b6200009890546200018b565b62000098906200008c906001600160a01b031682565b6200009890620001a2565b6200009890620001b8565b90620001e262000098620001fe92620001c3565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200020e600062000196565b906200021c816000620001ce565b620002536200024c7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620001c3565b91620001c3565b916200025e60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063715018a6146100625780638da5cb5b1461005d5780639623609d14610058578063ad3cb1cc146100535763f2fde38b036100725761035a565b61031f565b610246565b6100a9565b610077565b600091031261007257565b600080fd5b3461007257610087366004610067565b61008f6103aa565b604051005b0390f35b6001600160a01b031690565b90565b565b34610072576100b9366004610067565b6100946100ce6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b6001600160a01b0381165b0361007257565b905035906100a7826100e8565b6001600160a01b0381166100f3565b905035906100a782610107565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761017457604052565b610123565b906100a761018660405190565b9283610152565b67ffffffffffffffff811161017457602090601f01601f19160190565b0190565b90826000939282370152565b909291926101cf6101ca8261018d565b610179565b93818552602085019082840111610072576100a7926101ae565b9080601f83011215610072578160206100a4933591016101ba565b916060838303126100725761021982846100fa565b926102278360208301610116565b92604082013567ffffffffffffffff8111610072576100a492016101e9565b61008f610254366004610204565b91610622565b906102676101ca8361018d565b918252565b610276600561025a565b7f352e302e30000000000000000000000000000000000000000000000000000000602082015290565b6100a461026c565b6100a461029f565b6100a46102a7565b60005b8381106102ca5750506000910152565b81810151838201526020016102ba565b6102fb6103046020936101aa936102ef815190565b80835293849260200190565b958691016102b7565b601f01601f191690565b60208082526100a4929101906102da565b346100725761032f366004610067565b61009461033a6102af565b6040519182918261030e565b90602082820312610072576100a491610116565b346100725761008f61036d366004610346565b61049b565b61037a6103b2565b6100a7610398565b6100986100a46100a49290565b6100a490610382565b6100a76103a5600061038f565b610514565b6100a7610372565b60005433906001600160a01b03168190036103ca5750565b610414906103d760405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6100a7906104246103b2565b61042e600061038f565b6001600160a01b0381166001600160a01b0383161461045157506100a790610514565b6104149061045e60405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6100a790610418565b6100986100a46100a4926001600160a01b031690565b6100a4906104a4565b6100a4906104ba565b906104dc6100a4610510926104c3565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000546001600160a01b03169061052c8160006104cc565b61055f6105597f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104c3565b916104c3565b9161056960405190565b600090a3565b906100a7929161057d6103b2565b6105b1565b6001600160a01b0390911681526100a491604082019160208184039101526102da565b6040513d6000823e3d90fd5b6105ba906104c3565b349190634f1ef286813b15610072576000936105e9916105f46105dc60405190565b9788968795869460e01b90565b845260048401610582565b03925af1801561061d576106055750565b6100a79060006106158183610152565b810190610067565b6105a5565b906100a7929161056f56fea26469706673582212205d5f75a536a5fd2f2e441550c1d5a4e715b6cff79e1cc29a86c7abd4b441f65364736f6c63430008140033", +} + +// TransparentUpgradeableProxyABI is the input ABI used to generate the binding from. +// Deprecated: Use TransparentUpgradeableProxyMetaData.ABI instead. +var TransparentUpgradeableProxyABI = TransparentUpgradeableProxyMetaData.ABI + +// TransparentUpgradeableProxyBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use TransparentUpgradeableProxyMetaData.Bin instead. +var TransparentUpgradeableProxyBin = TransparentUpgradeableProxyMetaData.Bin + +// DeployTransparentUpgradeableProxy deploys a new Ethereum contract, binding an instance of TransparentUpgradeableProxy to it. +func DeployTransparentUpgradeableProxy(auth *bind.TransactOpts, backend bind.ContractBackend, _logic common.Address, initialOwner common.Address, _data []byte) (common.Address, *types.Transaction, *TransparentUpgradeableProxy, error) { + parsed, err := TransparentUpgradeableProxyMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TransparentUpgradeableProxyBin), backend, _logic, initialOwner, _data) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &TransparentUpgradeableProxy{TransparentUpgradeableProxyCaller: TransparentUpgradeableProxyCaller{contract: contract}, TransparentUpgradeableProxyTransactor: TransparentUpgradeableProxyTransactor{contract: contract}, TransparentUpgradeableProxyFilterer: TransparentUpgradeableProxyFilterer{contract: contract}}, nil +} + +// TransparentUpgradeableProxy is an auto generated Go binding around an Ethereum contract. +type TransparentUpgradeableProxy struct { + TransparentUpgradeableProxyCaller // Read-only binding to the contract + TransparentUpgradeableProxyTransactor // Write-only binding to the contract + TransparentUpgradeableProxyFilterer // Log filterer for contract events +} + +// TransparentUpgradeableProxyCaller is an auto generated read-only Go binding around an Ethereum contract. +type TransparentUpgradeableProxyCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TransparentUpgradeableProxyTransactor is an auto generated write-only Go binding around an Ethereum contract. +type TransparentUpgradeableProxyTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TransparentUpgradeableProxyFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type TransparentUpgradeableProxyFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TransparentUpgradeableProxySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type TransparentUpgradeableProxySession struct { + Contract *TransparentUpgradeableProxy // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TransparentUpgradeableProxyCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type TransparentUpgradeableProxyCallerSession struct { + Contract *TransparentUpgradeableProxyCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// TransparentUpgradeableProxyTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type TransparentUpgradeableProxyTransactorSession struct { + Contract *TransparentUpgradeableProxyTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TransparentUpgradeableProxyRaw is an auto generated low-level Go binding around an Ethereum contract. +type TransparentUpgradeableProxyRaw struct { + Contract *TransparentUpgradeableProxy // Generic contract binding to access the raw methods on +} + +// TransparentUpgradeableProxyCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type TransparentUpgradeableProxyCallerRaw struct { + Contract *TransparentUpgradeableProxyCaller // Generic read-only contract binding to access the raw methods on +} + +// TransparentUpgradeableProxyTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type TransparentUpgradeableProxyTransactorRaw struct { + Contract *TransparentUpgradeableProxyTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewTransparentUpgradeableProxy creates a new instance of TransparentUpgradeableProxy, bound to a specific deployed contract. +func NewTransparentUpgradeableProxy(address common.Address, backend bind.ContractBackend) (*TransparentUpgradeableProxy, error) { + contract, err := bindTransparentUpgradeableProxy(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &TransparentUpgradeableProxy{TransparentUpgradeableProxyCaller: TransparentUpgradeableProxyCaller{contract: contract}, TransparentUpgradeableProxyTransactor: TransparentUpgradeableProxyTransactor{contract: contract}, TransparentUpgradeableProxyFilterer: TransparentUpgradeableProxyFilterer{contract: contract}}, nil +} + +// NewTransparentUpgradeableProxyCaller creates a new read-only instance of TransparentUpgradeableProxy, bound to a specific deployed contract. +func NewTransparentUpgradeableProxyCaller(address common.Address, caller bind.ContractCaller) (*TransparentUpgradeableProxyCaller, error) { + contract, err := bindTransparentUpgradeableProxy(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &TransparentUpgradeableProxyCaller{contract: contract}, nil +} + +// NewTransparentUpgradeableProxyTransactor creates a new write-only instance of TransparentUpgradeableProxy, bound to a specific deployed contract. +func NewTransparentUpgradeableProxyTransactor(address common.Address, transactor bind.ContractTransactor) (*TransparentUpgradeableProxyTransactor, error) { + contract, err := bindTransparentUpgradeableProxy(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &TransparentUpgradeableProxyTransactor{contract: contract}, nil +} + +// NewTransparentUpgradeableProxyFilterer creates a new log filterer instance of TransparentUpgradeableProxy, bound to a specific deployed contract. +func NewTransparentUpgradeableProxyFilterer(address common.Address, filterer bind.ContractFilterer) (*TransparentUpgradeableProxyFilterer, error) { + contract, err := bindTransparentUpgradeableProxy(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &TransparentUpgradeableProxyFilterer{contract: contract}, nil +} + +// bindTransparentUpgradeableProxy binds a generic wrapper to an already deployed contract. +func bindTransparentUpgradeableProxy(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := TransparentUpgradeableProxyMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TransparentUpgradeableProxy.Contract.TransparentUpgradeableProxyCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TransparentUpgradeableProxy.Contract.TransparentUpgradeableProxyTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TransparentUpgradeableProxy.Contract.TransparentUpgradeableProxyTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TransparentUpgradeableProxy.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TransparentUpgradeableProxy.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TransparentUpgradeableProxy.Contract.contract.Transact(opts, method, params...) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _TransparentUpgradeableProxy.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxySession) Fallback(calldata []byte) (*types.Transaction, error) { + return _TransparentUpgradeableProxy.Contract.Fallback(&_TransparentUpgradeableProxy.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _TransparentUpgradeableProxy.Contract.Fallback(&_TransparentUpgradeableProxy.TransactOpts, calldata) +} + +// TransparentUpgradeableProxyAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the TransparentUpgradeableProxy contract. +type TransparentUpgradeableProxyAdminChangedIterator struct { + Event *TransparentUpgradeableProxyAdminChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TransparentUpgradeableProxyAdminChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TransparentUpgradeableProxyAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TransparentUpgradeableProxyAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TransparentUpgradeableProxyAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TransparentUpgradeableProxyAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TransparentUpgradeableProxyAdminChanged represents a AdminChanged event raised by the TransparentUpgradeableProxy contract. +type TransparentUpgradeableProxyAdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*TransparentUpgradeableProxyAdminChangedIterator, error) { + + logs, sub, err := _TransparentUpgradeableProxy.contract.FilterLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return &TransparentUpgradeableProxyAdminChangedIterator{contract: _TransparentUpgradeableProxy.contract, event: "AdminChanged", logs: logs, sub: sub}, nil +} + +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *TransparentUpgradeableProxyAdminChanged) (event.Subscription, error) { + + logs, sub, err := _TransparentUpgradeableProxy.contract.WatchLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TransparentUpgradeableProxyAdminChanged) + if err := _TransparentUpgradeableProxy.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyFilterer) ParseAdminChanged(log types.Log) (*TransparentUpgradeableProxyAdminChanged, error) { + event := new(TransparentUpgradeableProxyAdminChanged) + if err := _TransparentUpgradeableProxy.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// TransparentUpgradeableProxyUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the TransparentUpgradeableProxy contract. +type TransparentUpgradeableProxyUpgradedIterator struct { + Event *TransparentUpgradeableProxyUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TransparentUpgradeableProxyUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TransparentUpgradeableProxyUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TransparentUpgradeableProxyUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TransparentUpgradeableProxyUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TransparentUpgradeableProxyUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TransparentUpgradeableProxyUpgraded represents a Upgraded event raised by the TransparentUpgradeableProxy contract. +type TransparentUpgradeableProxyUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*TransparentUpgradeableProxyUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _TransparentUpgradeableProxy.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &TransparentUpgradeableProxyUpgradedIterator{contract: _TransparentUpgradeableProxy.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *TransparentUpgradeableProxyUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _TransparentUpgradeableProxy.contract.WatchLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TransparentUpgradeableProxyUpgraded) + if err := _TransparentUpgradeableProxy.contract.UnpackLog(event, "Upgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_TransparentUpgradeableProxy *TransparentUpgradeableProxyFilterer) ParseUpgraded(log types.Log) (*TransparentUpgradeableProxyUpgraded, error) { + event := new(TransparentUpgradeableProxyUpgraded) + if err := _TransparentUpgradeableProxy.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/generated/WrappedERC20/WrappedERC20.go b/contracts/generated/WrappedERC20/WrappedERC20.go index 31db6988e0..1ef5ddbc56 100644 --- a/contracts/generated/WrappedERC20/WrappedERC20.go +++ b/contracts/generated/WrappedERC20/WrappedERC20.go @@ -32,7 +32,7 @@ var ( // WrappedERC20MetaData contains all meta data concerning the WrappedERC20 contract. var WrappedERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"giver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issueFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f31790553480156200003757600080fd5b5060405162001333380380620013338339810160408190526200005a9162000233565b8181818160036200006c83826200032c565b5060046200007b82826200032c565b5050505050620000b27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620000bb60201b60201c565b505050620003f8565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16620001645760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556200011b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000168565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019657600080fd5b81516001600160401b0380821115620001b357620001b36200016e565b604051601f8301601f19908116603f01168101908282118183101715620001de57620001de6200016e565b81604052838152602092508683858801011115620001fb57600080fd5b600091505b838210156200021f578582018301518183018401529082019062000200565b600093810190920192909252949350505050565b600080604083850312156200024757600080fd5b82516001600160401b03808211156200025f57600080fd5b6200026d8683870162000184565b935060208501519150808211156200028457600080fd5b50620002938582860162000184565b9150509250929050565b600181811c90821680620002b257607f821691505b602082108103620002d357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200032757600081815260208120601f850160051c81016020861015620003025750805b601f850160051c820191505b8181101562000323578281556001016200030e565b5050505b505050565b81516001600160401b038111156200034857620003486200016e565b62000360816200035984546200029d565b84620002d9565b602080601f8311600181146200039857600084156200037f5750858301515b600019600386901b1c1916600185901b17855562000323565b600085815260208120601f198616915b82811015620003c957888601518255948401946001909101908401620003a8565b5085821015620003e85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610f2b80620004086000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017e578063095ea7b31461019357806318160ddd146101a6575b600080fd5b610169610164366004610cf7565b610307565b60405190151581526020015b60405180910390f35b6101866103a0565b6040516101759190610d40565b6101696101a1366004610daa565b610432565b6002545b604051908152602001610175565b6101cb6101c6366004610daa565b61044a565b005b6101696101db366004610dd4565b6104e0565b6101aa6101ee366004610e10565b60009081526007602052604090206001015490565b6101cb610211366004610e29565b610504565b60405160128152602001610175565b6101cb610233366004610e29565b61052f565b6101aa610246366004610e55565b61057b565b6101aa7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610e29565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610186610621565b6101cb6102c1366004610daa565b610630565b6101aa600081565b6101696102dc366004610daa565b610664565b6101cb6102ef366004610e29565b610672565b6101aa610302366004610e70565b610697565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e9a565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e9a565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856107a8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610474816107b5565b8161047e8461057b565b10156104d15760405162461bcd60e51b815260206004820152601560248201527f496e73756666696369656e742062616c616e63652e000000000000000000000060448201526064015b60405180910390fd5b6104db83836107c2565b505050565b6000336104ee8582856107fc565b6104f9858585610875565b506001949350505050565b60008281526007602052604090206001015461051f816107b5565b61052983836108d4565b50505050565b6001600160a01b0381163314610571576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104db8282610982565b60006001600160a01b03821632036105ab576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105d9576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260206004820152601f60248201527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650060448201526064016104c8565b6060600480546103af90610e9a565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561065a816107b5565b6104db8383610a09565b600033610440818585610875565b60008281526007602052604090206001015461068d816107b5565b6105298383610982565b6000326001600160a01b03841614806106b85750326001600160a01b038316145b156106eb576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b038416148061070a5750336001600160a01b038316145b1561073a576001600160a01b038084166000908152600160209081526040808320938616835292905220546106e4565b60405162461bcd60e51b815260206004820152602160248201527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016104c8565b6104db8383836001610a3f565b6107bf8133610b46565b50565b6001600160a01b0382166107ec57604051634b637e8f60e11b8152600060048201526024016104c8565b6107f882600083610bb4565b5050565b60006108088484610697565b905060001981146105295781811015610866576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101829052604481018390526064016104c8565b61052984848484036000610a3f565b6001600160a01b03831661089f57604051634b637e8f60e11b8152600060048201526024016104c8565b6001600160a01b0382166108c95760405163ec442f0560e01b8152600060048201526024016104c8565b6104db838383610bb4565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff1661097a5760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556109323390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff161561097a5760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b038216610a335760405163ec442f0560e01b8152600060048201526024016104c8565b6107f860008383610bb4565b6001600160a01b038416610a82576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016104c8565b6001600160a01b038316610ac5576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016104c8565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b3891815260200190565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107f8576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016104c8565b6001600160a01b038316610bdf578060026000828254610bd49190610ed4565b90915550610c6a9050565b6001600160a01b03831660009081526020819052604090205481811015610c4b576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260248101829052604481018390526064016104c8565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610c8657600280548290039055610ca5565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cea91815260200190565b60405180910390a3505050565b600060208284031215610d0957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d3957600080fd5b9392505050565b600060208083528351808285015260005b81811015610d6d57858101830151858201604001528201610d51565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610da557600080fd5b919050565b60008060408385031215610dbd57600080fd5b610dc683610d8e565b946020939093013593505050565b600080600060608486031215610de957600080fd5b610df284610d8e565b9250610e0060208501610d8e565b9150604084013590509250925092565b600060208284031215610e2257600080fd5b5035919050565b60008060408385031215610e3c57600080fd5b82359150610e4c60208401610d8e565b90509250929050565b600060208284031215610e6757600080fd5b610d3982610d8e565b60008060408385031215610e8357600080fd5b610e8c83610d8e565b9150610e4c60208401610d8e565b600181811c90821680610eae57607f821691505b602082108103610ece57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561039a57634e487b7160e01b600052601160045260246000fdfea2646970667358221220a307e2ee117bcf3e53b622ffac095c2f1cd8a70831fd4167f3b371f2b637356664736f6c63430008140033", + Bin: "0x60806040523462000031576200001f6200001862000175565b906200019c565b60405161123262000595823961123290f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160401b0381116200006e57602090601f01601f19160190565b60005b838110620000be5750506000910152565b8181015183820152602001620000ad565b90929192620000e8620000e2826200008d565b62000074565b9381855260208501908284011162000031576200008b92620000aa565b9080601f83011215620000315781516200012292602001620000cf565b90565b919091604081840312620000315780516001600160401b0381116200003157836200015291830162000105565b60208201519093906001600160401b038111620000315762000122920162000105565b62000198620017c7803803806200018c8162000074565b92833981019062000125565b9091565b90620001a891620001d7565b620001d4337fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775620004d5565b50565b6200008b9182918291829162000255565b906001600160a01b03905b9181191691161790565b620001229062000213906001600160a01b031682565b6001600160a01b031690565b6200012290620001fd565b62000122906200021f565b90620002496200012262000251926200022a565b8254620001e8565b9055565b9062000261916200047a565b6200008b73deb34a740eca1ec42c8b8204cbec0ba34fdd27f3600562000235565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620002bb575b6020831014620002b557565b62000282565b91607f1691620002a9565b9160001960089290920291821b911b620001f3565b6200012262000122620001229290565b919062000300620001226200025193620002db565b908354620002c6565b6200008b91600091620002eb565b81811062000323575050565b8062000333600060019362000309565b0162000317565b9190601f81116200034a57505050565b6200035e6200008b93600052602060002090565b906020601f84018190048301931062000382575b6020601f90910104019062000317565b909150819062000372565b9062000397815190565b906001600160401b0382116200006e57620003bf82620003b8855462000298565b856200033a565b602090601f8311600114620003fe5762000251929160009183620003f2575b5050600019600883021c1916906002021790565b015190503880620003de565b601f198316916200041485600052602060002090565b9260005b81811062000455575091600293918560019694106200043b575b50505002019055565b01516000196008601f8516021c1916905538808062000432565b9193602060018192878701518155019501920162000418565b906200008b916200038d565b906200048c6200008b9260036200046e565b60046200046e565b905b600052602052604060002090565b9062000496906200022a565b9060ff90620001f3565b90620004cd620001226200025192151590565b8254620004b0565b620004e9620004e583836200056b565b1590565b1562000564576001916200051883620005128360006200050b87600762000494565b01620004a4565b620004ba565b3390620005526200054b6200054b7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b926200022a565b926200055d60405190565b600090a490565b5050600090565b620001229160006200050b6200058d9362000584600090565b50600762000494565b5460ff169056fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461014257806306fdde031461013d578063095ea7b31461013857806318160ddd146101335780631dd319cb1461012e57806323b872dd14610129578063248a9ca3146101245780632f2ff15d1461011f578063313ce5671461011a57806336568abe1461011557806370a082311461011057806375b238fc1461010b57806391d148541461010657806395d89b4114610101578063979005ad146100fc578063a217fddf146100f7578063a9059cbb146100f2578063d547741f146100ed5763dd62ed3e0361017257610570565b61053d565b610521565b610506565b6104ce565b6104b3565b610497565b61045e565b610443565b610416565b6103e7565b6103ce565b610390565b610360565b610312565b6102e6565b6102ca565b610245565b61019d565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361017257565b600080fd5b9050359061018482610147565b565b906020828203126101725761019a91610177565b90565b34610172576101ca6101b86101b3366004610186565b61058c565b60405191829182901515815260200190565b0390f35b600091031261017257565b60005b8381106101ec5750506000910152565b81810151838201526020016101dc565b61021d61022660209361023093610211815190565b80835293849260200190565b958691016101d9565b601f01601f191690565b0190565b602080825261019a929101906101fc565b34610172576102553660046101ce565b6101ca610260610a37565b60405191829182610234565b6001600160a01b031690565b6001600160a01b03811661016b565b9050359061018482610278565b8061016b565b9050359061018482610294565b91906040838203126101725761019a906102c18185610287565b9360200161029a565b34610172576101ca6101b86102e03660046102a7565b90610a81565b34610172576102f63660046101ce565b6101ca610301610a62565b6040515b9182918290815260200190565b346101725761032b6103253660046102a7565b906111b4565b604051005b90916060828403126101725761019a6103498484610287565b936103578160208601610287565b9360400161029a565b34610172576101ca6101b8610376366004610330565b91610a8c565b906020828203126101725761019a9161029a565b34610172576101ca6103016103a636600461037c565b6106b8565b91906040838203126101725761019a906103c5818561029a565b93602001610287565b346101725761032b6103e13660046103ab565b906106f2565b34610172576103f73660046101ce565b6101ca610402610a58565b6040519182918260ff909116815260200190565b346101725761032b6104293660046103ab565b906107a6565b906020828203126101725761019a91610287565b34610172576101ca61030161045936600461042f565b610f05565b346101725761046e3660046101ce565b6101ca7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610301565b34610172576101ca6101b86104ad3660046103ab565b9061067f565b34610172576104c33660046101ce565b6101ca610260610a41565b346101725761032b6104e13660046102a7565b906110d0565b61019a61019a61019a9290565b61019a60006104e7565b61019a6104f4565b34610172576105163660046101ce565b6101ca6103016104fe565b34610172576101ca6101b86105373660046102a7565b90610a6c565b346101725761032b6105503660046103ab565b9061079c565b91906040838203126101725761019a906103c58185610287565b34610172576101ca610301610586366004610556565b90610f9e565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216149081156105dc575090565b61019a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b61026c61019a61019a926001600160a01b031690565b61019a90610638565b61019a9061064e565b9061062a90610657565b61019a905b60ff1690565b61019a905461066a565b61019a91600061069c6106a293610694600090565b506007610628565b01610660565b610675565b61019a9081565b61019a90546106a7565b60016106c961019a92610694600090565b016106ae565b90610184916106e56106e0826106b8565b6106fc565b906106ef9161081d565b50565b90610184916106cf565b610184903390610728565b6001600160a01b0390911681526040810192916101849160200152565b0152565b9061073a610736828461067f565b1590565b610742575050565b61077d61074e60405190565b9283927fe2517d3f00000000000000000000000000000000000000000000000000000000845260048401610707565b0390fd5b90610184916107926106e0826106b8565b906106ef9161089a565b9061018491610781565b906107b03361026c565b6001600160a01b038216036107c8576106ef9161089a565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061081261019a61081992151590565b82546107f3565b9055565b61082a610736838361067f565b156108935760019161084c8361084783600061069c876007610628565b610802565b339061088261087c61087c7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b92610657565b9261088c60405190565b600090a490565b5050600090565b906108a5818361067f565b15610893576108bf6000610847838261069c876007610628565b33906108ef61087c61087c7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b926108f960405190565b600090a4600190565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610938575b602083101461093357565b610902565b91607f1691610928565b8054600093929161095f61095583610918565b8085529360200190565b91600181169081156109b1575060011461097857505050565b61098b9192939450600052602060002090565b916000925b81841061099d5750500190565b805484840152602090930192600101610990565b92949550505060ff1916825215156020020190565b9061019a91610942565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff821117610a0857604052565b6109d0565b90610184610a2792610a1e60405190565b938480926109c6565b03836109e6565b61019a90610a0d565b61019a6003610a2e565b61019a6004610a2e565b61066f61019a61019a9290565b61019a6012610a4b565b61019a60026106ae565b610a7c919033610ab3565b610ab3565b600190565b610a7c919033610d52565b610a7c929190610a77833383610e81565b61026c61019a61019a9290565b61019a90610a9d565b929190610ac06000610aaa565b936001600160a01b0385166001600160a01b03821614610b48576001600160a01b0385166001600160a01b03831614610afe57610184939450610c02565b61077d85610b0b60405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61077d85610b5560405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6001600160a01b039091168152606081019392610184929091604091610724906020830152565b90600019906107f8565b90610bd361019a610819926104e7565b8254610bb9565b634e487b7160e01b600052601160045260246000fd5b91908201809211610bfd57565b610bda565b816000610c0e81610aaa565b6001600160a01b0381166001600160a01b03851603610cd857610c489061026c610c4188610c3c60026106ae565b610bf0565b6002610bc3565b6001600160a01b03831603610cb3575050610c6e610c4184610c6a60026106ae565b0390565b610cae610ca4610c9e7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef93610657565b93610657565b9361030560405190565b0390a3565b610cd391610cc091610660565b610ccd85610230836106ae565b90610bc3565b610c6e565b909150610ced610ce88484610660565b6106ae565b858110610d155784929161026c610d0688610c48940390565b610d108786610660565b610bc3565b8361077d87610d2360405190565b9384937fe450d38c00000000000000000000000000000000000000000000000000000000855260048501610b92565b9091610184926001925b909192610d696000610aaa565b6001600160a01b0381166001600160a01b03841614610e37576001600160a01b0381166001600160a01b03851614610ded5750610db484610d1085610daf866001610660565b610660565b610dbd57505050565b610cae610ca4610c9e7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593610657565b61077d90610dfa60405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61077d90610e4460405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b90929192610e8f8183610f9e565b936000198503610ea1575b5050509050565b808510610ec757610eb590610ebe94950390565b90600092610d5c565b80388080610e9a565b9061077d8592610ed660405190565b9384937ffb8f41b200000000000000000000000000000000000000000000000000000000855260048501610b92565b32610f216001600160a01b0383165b916001600160a01b031690565b14610f835733610f396001600160a01b038316610f14565b14610f835760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e6365006044820152606490fd5b61019a90610ce861019a91610f96600090565b506000610660565b90326001600160a01b0383168114908115611062575b5061103e57336001600160a01b0383168114908115611047575b5061103e5760405162461bcd60e51b815260206004820152602160248201527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b61019a9161107d565b905061105b6001600160a01b038316610f14565b1438610fce565b90506110766001600160a01b038316610f14565b1438610fb4565b61019a91610daf610ce892611090600090565b506001610660565b61018491906110c67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106fc565b90610184916110da565b9061018491611098565b91906110e66000610aaa565b926001600160a01b0384166001600160a01b0382161461110a576101849293610c02565b61077d84610b0b60405190565b61018491906111457fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106fc565b611196565b1561115157565b60405162461bcd60e51b815260206004820152601560248201527f496e73756666696369656e742062616c616e63652e00000000000000000000006044820152606490fd5b90610184916111af6111a782610f05565b83111561114a565b6111be565b9061018491611117565b91906111ca6000610aaa565b926001600160a01b0384166001600160a01b038216146111ef57926101849293610c02565b61077d84610b556040519056fea264697066735822122079eebf01d093afea82357215e4515e77a037e9fc967cff9adeeffb005ff0d0bd64736f6c63430008140033", } // WrappedERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ZenBase/ZenBase.go b/contracts/generated/ZenBase/ZenBase.go new file mode 100644 index 0000000000..01e11fb022 --- /dev/null +++ b/contracts/generated/ZenBase/ZenBase.go @@ -0,0 +1,1046 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ZenBase + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// TransactionDecoderTransaction is an auto generated low-level Go binding around an user-defined struct. +type TransactionDecoderTransaction struct { + TxType uint8 + ChainId *big.Int + Nonce *big.Int + GasPrice *big.Int + GasLimit *big.Int + To common.Address + Value *big.Int + Data []byte + V uint8 + R [32]byte + S [32]byte + MaxPriorityFeePerGas *big.Int + MaxFeePerGas *big.Int + AccessList []common.Address +} + +// ZenBaseMetaData contains all meta data concerning the ZenBase contract. +var ZenBaseMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionsAnalyzer\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"accessList\",\"type\":\"address[]\"}],\"internalType\":\"structTransactionDecoder.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523462000031576200001f62000018620001b2565b916200023b565b6040516112256200057e823961122590f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003157565b905051906200008b826200009c565b6001600160401b0381116200006e57602090601f01601f19160190565b60005b838110620000ee5750506000910152565b8181015183820152602001620000dd565b90929192620001186200011282620000bd565b62000074565b9381855260208501908284011162000031576200008b92620000da565b9080601f83011215620000315781516200009992602001620000ff565b9160608383031262000031576200016a8284620000ae565b60208401519093906001600160401b0381116200003157836200018f91830162000135565b60408201519093906001600160401b038111620000315762000099920162000135565b620001d5620017a380380380620001c98162000074565b92833981019062000152565b909192565b906001600160a01b03905b9181191691161790565b62000099906200008d906001600160a01b031682565b6200009990620001ef565b620000999062000205565b906200022f62000099620002379262000210565b8254620001da565b9055565b906200008b926200024d913362000255565b60066200021b565b906200008b92916200027d565b6200008d62000099620000999290565b620000999062000262565b916200028991620004ea565b62000295600062000272565b6001600160a01b0381166001600160a01b03831614620002bb57506200008b906200051b565b620002ee90620002ca60405190565b631e4fbdf760e01b8152918291600483016001600160a01b03909116815260200190565b0390fd5b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156200032b575b60208310146200032557565b620002f2565b91607f169162000319565b9160001960089290920291821b911b620001e5565b6200009962000099620000999290565b9190620003706200009962000237936200034b565b90835462000336565b6200008b916000916200035b565b81811062000393575050565b80620003a3600060019362000379565b0162000387565b9190601f8111620003ba57505050565b620003ce6200008b93600052602060002090565b906020601f840181900483019310620003f2575b6020601f90910104019062000387565b9091508190620003e2565b9062000407815190565b906001600160401b0382116200006e576200042f8262000428855462000308565b85620003aa565b602090601f83116001146200046e576200023792916000918362000462575b5050600019600883021c1916906002021790565b0151905038806200044e565b601f198316916200048485600052602060002090565b9260005b818110620004c557509160029391856001969410620004ab575b50505002019055565b01516000196008601f8516021c19169055388080620004a2565b9193602060018192878701518155019501920162000488565b906200008b91620003fd565b90620004fc6200008b926003620004de565b6004620004de565b62000099906200008d565b62000099905462000504565b6200052760056200050f565b90620005358160056200021b565b6200056c620005657f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000210565b9162000210565b916200057760405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806306fdde03146100f2578063095ea7b3146100ed57806318160ddd146100e857806323b872dd146100e3578063313ce567146100de57806340c10f19146100d9578063630ac52c146100d457806370a08231146100cf578063715018a6146100ca5780638da5cb5b146100c557806395d89b41146100c0578063a9059cbb146100bb578063dd62ed3e146100b65763f2fde38b0361010257610466565b61044a565b61040b565b6103f0565b6103b1565b610399565b61037e565b610351565b6102d9565b6102aa565b61028e565b610232565b610204565b610176565b600091031261010257565b600080fd5b60005b83811061011a5750506000910152565b818101518382015260200161010a565b61014b61015460209361015e9361013f815190565b80835293849260200190565b95869101610107565b601f01601f191690565b0190565b60208082526101739291019061012a565b90565b34610102576101863660046100f7565b61019d6101916107aa565b60405191829182610162565b0390f35b6001600160a01b031690565b6001600160a01b0381165b0361010257565b905035906101cc826101ad565b565b806101b8565b905035906101cc826101ce565b919060408382031261010257610173906101fb81856101bf565b936020016101d4565b346101025761019d61022061021a3660046101e1565b9061085f565b60405191829182901515815260200190565b34610102576102423660046100f7565b61019d61024d6107ec565b6040515b9182918290815260200190565b90916060828403126101025761017361027784846101bf565b9361028581602086016101bf565b936040016101d4565b346101025761019d6102206102a436600461025e565b9161086a565b34610102576102ba3660046100f7565b61019d6102c56107d1565b6040519182918260ff909116815260200190565b34610102576102f26102ec3660046101e1565b906111e5565b604051005b909182601f830112156101025781359167ffffffffffffffff831161010257602001926020830284011161010257565b9060208282031261010257813567ffffffffffffffff81116101025761034d92016102f7565b9091565b34610102576102f2610364366004610327565b90611187565b9060208282031261010257610173916101bf565b346101025761019d61024d61039436600461036a565b61080e565b34610102576103a93660046100f7565b6102f26104b6565b34610102576103c13660046100f7565b61019d6103d66005546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b34610102576104003660046100f7565b61019d6101916107b4565b346101025761019d6102206104213660046101e1565b9061082a565b9190604083820312610102576101739061044181856101bf565b936020016101bf565b346101025761019d61024d610460366004610427565b9061083f565b34610102576102f261047936600461036a565b6105b7565b6104866104be565b6101cc6104a4565b6101a16101736101739290565b6101739061048e565b6101cc6104b1600061049b565b610618565b6101cc61047e565b6005546001600160a01b031633906104de825b916001600160a01b031690565b036104e65750565b610530906104f360405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6101cc906105406104be565b61054a600061049b565b6001600160a01b0381166001600160a01b0383161461056d57506101cc90610618565b6105309061057a60405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6101cc90610534565b906001600160a01b03905b9181191691161790565b6101a1610173610173926001600160a01b031690565b610173906105d5565b610173906105eb565b9061060d610173610614926105f4565b82546105c0565b9055565b6005546001600160a01b0316906106308160056105fd565b61066361065d7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936105f4565b916105f4565b9161066d60405190565b80805b0390a3565b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156106ab575b60208310146106a657565b610675565b91607f169161069b565b805460009392916106d26106c88361068b565b8085529360200190565b916001811690811561072457506001146106eb57505050565b6106fe9192939450600052602060002090565b916000925b8184106107105750500190565b805484840152602090930192600101610703565b92949550505060ff1916825215156020020190565b90610173916106b5565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761077b57604052565b610743565b906101cc61079a9261079160405190565b93848092610739565b0383610759565b61017390610780565b61017360036107a1565b61017360046107a1565b6107cb6101736101739290565b60ff1690565b61017360126107be565b6101739081565b61017390546107db565b61017360026107e2565b90610800906105f4565b600052602052604060002090565b6108256101739161081d600090565b5060006107f6565b6107e2565b61083a91903361087b565b61087b565b600190565b6101739161085a61082592610852600090565b5060016107f6565b6107f6565b61083a919033610b21565b61083a929190610835833383610c4b565b929190610888600061049b565b936001600160a01b0385166001600160a01b03821614610910576001600160a01b0385166001600160a01b038316146108c6576101cc9394506109db565b610530856108d360405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6105308561091d60405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6001600160a01b0390911681526060810193926101cc929091604091610981906020830152565b0152565b90600019906105cb565b6101736101736101739290565b906109ac6101736106149261098f565b8254610985565b634e487b7160e01b600052601160045260246000fd5b919082018092116109d657565b6109b3565b8160006109e78161049b565b6001600160a01b0381166001600160a01b03851603610aac57610a21906101a1610a1a88610a1560026107e2565b6109c9565b600261099c565b6001600160a01b03831603610a87575050610a47610a1a84610a4360026107e2565b0390565b610670610a7d610a777fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef936105f4565b936105f4565b9361025160405190565b610aa791610a94916107f6565b610aa18561015e836107e2565b9061099c565b610a47565b909150610abc61082584846107f6565b858110610ae4578492916101a1610ad588610a21940390565b610adf87866107f6565b61099c565b8361053087610af260405190565b9384937fe450d38c0000000000000000000000000000000000000000000000000000000085526004850161095a565b90916101cc926001925b909192610b38600061049b565b6001600160a01b0381166001600160a01b03841614610c01576001600160a01b0381166001600160a01b03851614610bb75750610b7e84610adf8561085a8660016107f6565b610b8757505050565b610670610a7d610a777f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925936105f4565b61053090610bc460405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61053090610c0e60405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b90929192610c59818361083f565b936000198503610c6b575b5050509050565b808510610c9157610c7f90610c8894950390565b90600092610b2b565b80388080610c64565b906105308592610ca060405190565b9384937ffb8f41b20000000000000000000000000000000000000000000000000000000085526004850161095a565b15610cd657565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60448201527f61746564206164647265737300000000000000000000000000000000000000006064820152608490fd5b906101cc91610d8233610d7c6104d16101a16006546001600160a01b031690565b14610ccf565b6110b4565b60001981146109d65760010190565b634e487b7160e01b600052603260045260246000fd5b9035906101be193682900301821215610102570190565b90821015610dda5760206101739202810190610dac565b610d96565b905051906101cc826101ad565b906020828203126101025761017391610ddf565b60ff81166101b8565b905035906101cc82610e00565b50610173906020810190610e09565b506101739060208101906101d4565b506101739060208101906101bf565b9035601e19368390030181121561010257016020813591019167ffffffffffffffff82116101025736829003831361010257565b90826000939282370152565b919061015481610e9a8161015e9560209181520190565b8095610e77565b9035601e19368390030181121561010257016020813591019167ffffffffffffffff821161010257602082023603831361010257565b818352602090920191906000825b828210610ef3575050505090565b90919293610f22610f1b600192610f0a8886610e34565b6001600160a01b0316815260200190565b9560200190565b93920190610ee5565b61017391611088610ffc6101c08301610f4e610f478680610e16565b60ff168552565b610f65610f5e6020870187610e25565b6020860152565b610f7c610f756040870187610e25565b6040860152565b610f93610f8c6060870187610e25565b6060860152565b610faa610fa36080870187610e25565b6080860152565b610fca610fba60a0870187610e34565b6001600160a01b031660a0860152565b610fe1610fda60c0870187610e25565b60c0860152565b610fee60e0860186610e43565b9085830360e0870152610e83565b9261101961100e610100830183610e16565b60ff16610100850152565b61103261102a610120830183610e25565b610120850152565b61104b611043610140830183610e25565b610140850152565b61106461105c610160830183610e25565b610160850152565b61107d611075610180830183610e25565b610180850152565b6101a0810190610ea1565b916101a0818503910152610ed7565b602080825261017392910190610f2b565b6040513d6000823e3d90fd5b91906110c0600061098f565b818110156111815761111890602063fe7fbd1873__$3a457adf3f2d33c60ddff735cdd91d6a07$__61110d6110f685888b610dc3565b9261110060405190565b9687948593849360e01b90565b835260048301611097565b03915af491821561117c57611149926111449160009161114e575b5061113e600161098f565b90611191565b610d87565b6110c0565b61116f915060203d8111611175575b6111678183610759565b810190610dec565b38611133565b503d61115d565b6110a8565b50509050565b906101cc91610d5b565b919061119d600061049b565b926001600160a01b0384166001600160a01b038216146111c1576101cc92936109db565b610530846108d360405190565b906101cc916111db6104be565b906101cc91611191565b906101cc916111ce56fea2646970667358221220319d7df78beef1437b2f4a0a18444da02fd93e6b175e55d493734819ea0f6b7664736f6c63430008140033", +} + +// ZenBaseABI is the input ABI used to generate the binding from. +// Deprecated: Use ZenBaseMetaData.ABI instead. +var ZenBaseABI = ZenBaseMetaData.ABI + +// ZenBaseBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ZenBaseMetaData.Bin instead. +var ZenBaseBin = ZenBaseMetaData.Bin + +// DeployZenBase deploys a new Ethereum contract, binding an instance of ZenBase to it. +func DeployZenBase(auth *bind.TransactOpts, backend bind.ContractBackend, transactionsAnalyzer common.Address, name string, symbol string) (common.Address, *types.Transaction, *ZenBase, error) { + parsed, err := ZenBaseMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZenBaseBin), backend, transactionsAnalyzer, name, symbol) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ZenBase{ZenBaseCaller: ZenBaseCaller{contract: contract}, ZenBaseTransactor: ZenBaseTransactor{contract: contract}, ZenBaseFilterer: ZenBaseFilterer{contract: contract}}, nil +} + +// ZenBase is an auto generated Go binding around an Ethereum contract. +type ZenBase struct { + ZenBaseCaller // Read-only binding to the contract + ZenBaseTransactor // Write-only binding to the contract + ZenBaseFilterer // Log filterer for contract events +} + +// ZenBaseCaller is an auto generated read-only Go binding around an Ethereum contract. +type ZenBaseCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZenBaseTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ZenBaseTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZenBaseFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ZenBaseFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZenBaseSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ZenBaseSession struct { + Contract *ZenBase // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ZenBaseCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ZenBaseCallerSession struct { + Contract *ZenBaseCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ZenBaseTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ZenBaseTransactorSession struct { + Contract *ZenBaseTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ZenBaseRaw is an auto generated low-level Go binding around an Ethereum contract. +type ZenBaseRaw struct { + Contract *ZenBase // Generic contract binding to access the raw methods on +} + +// ZenBaseCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ZenBaseCallerRaw struct { + Contract *ZenBaseCaller // Generic read-only contract binding to access the raw methods on +} + +// ZenBaseTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ZenBaseTransactorRaw struct { + Contract *ZenBaseTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewZenBase creates a new instance of ZenBase, bound to a specific deployed contract. +func NewZenBase(address common.Address, backend bind.ContractBackend) (*ZenBase, error) { + contract, err := bindZenBase(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ZenBase{ZenBaseCaller: ZenBaseCaller{contract: contract}, ZenBaseTransactor: ZenBaseTransactor{contract: contract}, ZenBaseFilterer: ZenBaseFilterer{contract: contract}}, nil +} + +// NewZenBaseCaller creates a new read-only instance of ZenBase, bound to a specific deployed contract. +func NewZenBaseCaller(address common.Address, caller bind.ContractCaller) (*ZenBaseCaller, error) { + contract, err := bindZenBase(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ZenBaseCaller{contract: contract}, nil +} + +// NewZenBaseTransactor creates a new write-only instance of ZenBase, bound to a specific deployed contract. +func NewZenBaseTransactor(address common.Address, transactor bind.ContractTransactor) (*ZenBaseTransactor, error) { + contract, err := bindZenBase(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ZenBaseTransactor{contract: contract}, nil +} + +// NewZenBaseFilterer creates a new log filterer instance of ZenBase, bound to a specific deployed contract. +func NewZenBaseFilterer(address common.Address, filterer bind.ContractFilterer) (*ZenBaseFilterer, error) { + contract, err := bindZenBase(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ZenBaseFilterer{contract: contract}, nil +} + +// bindZenBase binds a generic wrapper to an already deployed contract. +func bindZenBase(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ZenBaseMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ZenBase *ZenBaseRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZenBase.Contract.ZenBaseCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ZenBase *ZenBaseRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZenBase.Contract.ZenBaseTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZenBase *ZenBaseRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZenBase.Contract.ZenBaseTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ZenBase *ZenBaseCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZenBase.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ZenBase *ZenBaseTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZenBase.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZenBase *ZenBaseTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZenBase.Contract.contract.Transact(opts, method, params...) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_ZenBase *ZenBaseCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _ZenBase.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_ZenBase *ZenBaseSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ZenBase.Contract.Allowance(&_ZenBase.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_ZenBase *ZenBaseCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ZenBase.Contract.Allowance(&_ZenBase.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ZenBase *ZenBaseCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _ZenBase.contract.Call(opts, &out, "balanceOf", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ZenBase *ZenBaseSession) BalanceOf(account common.Address) (*big.Int, error) { + return _ZenBase.Contract.BalanceOf(&_ZenBase.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ZenBase *ZenBaseCallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _ZenBase.Contract.BalanceOf(&_ZenBase.CallOpts, account) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ZenBase *ZenBaseCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ZenBase.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ZenBase *ZenBaseSession) Decimals() (uint8, error) { + return _ZenBase.Contract.Decimals(&_ZenBase.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ZenBase *ZenBaseCallerSession) Decimals() (uint8, error) { + return _ZenBase.Contract.Decimals(&_ZenBase.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ZenBase *ZenBaseCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ZenBase.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ZenBase *ZenBaseSession) Name() (string, error) { + return _ZenBase.Contract.Name(&_ZenBase.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ZenBase *ZenBaseCallerSession) Name() (string, error) { + return _ZenBase.Contract.Name(&_ZenBase.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ZenBase *ZenBaseCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZenBase.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ZenBase *ZenBaseSession) Owner() (common.Address, error) { + return _ZenBase.Contract.Owner(&_ZenBase.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ZenBase *ZenBaseCallerSession) Owner() (common.Address, error) { + return _ZenBase.Contract.Owner(&_ZenBase.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ZenBase *ZenBaseCaller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ZenBase.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ZenBase *ZenBaseSession) Symbol() (string, error) { + return _ZenBase.Contract.Symbol(&_ZenBase.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ZenBase *ZenBaseCallerSession) Symbol() (string, error) { + return _ZenBase.Contract.Symbol(&_ZenBase.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ZenBase *ZenBaseCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZenBase.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ZenBase *ZenBaseSession) TotalSupply() (*big.Int, error) { + return _ZenBase.Contract.TotalSupply(&_ZenBase.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ZenBase *ZenBaseCallerSession) TotalSupply() (*big.Int, error) { + return _ZenBase.Contract.TotalSupply(&_ZenBase.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 value) returns(bool) +func (_ZenBase *ZenBaseTransactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenBase.contract.Transact(opts, "approve", spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 value) returns(bool) +func (_ZenBase *ZenBaseSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenBase.Contract.Approve(&_ZenBase.TransactOpts, spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 value) returns(bool) +func (_ZenBase *ZenBaseTransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenBase.Contract.Approve(&_ZenBase.TransactOpts, spender, value) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address to, uint256 amount) returns() +func (_ZenBase *ZenBaseTransactor) Mint(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ZenBase.contract.Transact(opts, "mint", to, amount) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address to, uint256 amount) returns() +func (_ZenBase *ZenBaseSession) Mint(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ZenBase.Contract.Mint(&_ZenBase.TransactOpts, to, amount) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address to, uint256 amount) returns() +func (_ZenBase *ZenBaseTransactorSession) Mint(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ZenBase.Contract.Mint(&_ZenBase.TransactOpts, to, amount) +} + +// OnBlockEnd is a paid mutator transaction binding the contract method 0x630ac52c. +// +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[])[] transactions) returns() +func (_ZenBase *ZenBaseTransactor) OnBlockEnd(opts *bind.TransactOpts, transactions []TransactionDecoderTransaction) (*types.Transaction, error) { + return _ZenBase.contract.Transact(opts, "onBlockEnd", transactions) +} + +// OnBlockEnd is a paid mutator transaction binding the contract method 0x630ac52c. +// +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[])[] transactions) returns() +func (_ZenBase *ZenBaseSession) OnBlockEnd(transactions []TransactionDecoderTransaction) (*types.Transaction, error) { + return _ZenBase.Contract.OnBlockEnd(&_ZenBase.TransactOpts, transactions) +} + +// OnBlockEnd is a paid mutator transaction binding the contract method 0x630ac52c. +// +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[])[] transactions) returns() +func (_ZenBase *ZenBaseTransactorSession) OnBlockEnd(transactions []TransactionDecoderTransaction) (*types.Transaction, error) { + return _ZenBase.Contract.OnBlockEnd(&_ZenBase.TransactOpts, transactions) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ZenBase *ZenBaseTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZenBase.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ZenBase *ZenBaseSession) RenounceOwnership() (*types.Transaction, error) { + return _ZenBase.Contract.RenounceOwnership(&_ZenBase.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ZenBase *ZenBaseTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ZenBase.Contract.RenounceOwnership(&_ZenBase.TransactOpts) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 value) returns(bool) +func (_ZenBase *ZenBaseTransactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenBase.contract.Transact(opts, "transfer", to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 value) returns(bool) +func (_ZenBase *ZenBaseSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenBase.Contract.Transfer(&_ZenBase.TransactOpts, to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 value) returns(bool) +func (_ZenBase *ZenBaseTransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenBase.Contract.Transfer(&_ZenBase.TransactOpts, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 value) returns(bool) +func (_ZenBase *ZenBaseTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenBase.contract.Transact(opts, "transferFrom", from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 value) returns(bool) +func (_ZenBase *ZenBaseSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenBase.Contract.TransferFrom(&_ZenBase.TransactOpts, from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 value) returns(bool) +func (_ZenBase *ZenBaseTransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenBase.Contract.TransferFrom(&_ZenBase.TransactOpts, from, to, value) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ZenBase *ZenBaseTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ZenBase.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ZenBase *ZenBaseSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ZenBase.Contract.TransferOwnership(&_ZenBase.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ZenBase *ZenBaseTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ZenBase.Contract.TransferOwnership(&_ZenBase.TransactOpts, newOwner) +} + +// ZenBaseApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ZenBase contract. +type ZenBaseApprovalIterator struct { + Event *ZenBaseApproval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZenBaseApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZenBaseApproval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZenBaseApproval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZenBaseApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZenBaseApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZenBaseApproval represents a Approval event raised by the ZenBase contract. +type ZenBaseApproval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_ZenBase *ZenBaseFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*ZenBaseApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _ZenBase.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &ZenBaseApprovalIterator{contract: _ZenBase.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_ZenBase *ZenBaseFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ZenBaseApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _ZenBase.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZenBaseApproval) + if err := _ZenBase.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_ZenBase *ZenBaseFilterer) ParseApproval(log types.Log) (*ZenBaseApproval, error) { + event := new(ZenBaseApproval) + if err := _ZenBase.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZenBaseOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ZenBase contract. +type ZenBaseOwnershipTransferredIterator struct { + Event *ZenBaseOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZenBaseOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZenBaseOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZenBaseOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZenBaseOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZenBaseOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZenBaseOwnershipTransferred represents a OwnershipTransferred event raised by the ZenBase contract. +type ZenBaseOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ZenBase *ZenBaseFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ZenBaseOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ZenBase.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &ZenBaseOwnershipTransferredIterator{contract: _ZenBase.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ZenBase *ZenBaseFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ZenBaseOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ZenBase.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZenBaseOwnershipTransferred) + if err := _ZenBase.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ZenBase *ZenBaseFilterer) ParseOwnershipTransferred(log types.Log) (*ZenBaseOwnershipTransferred, error) { + event := new(ZenBaseOwnershipTransferred) + if err := _ZenBase.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZenBaseTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ZenBase contract. +type ZenBaseTransferIterator struct { + Event *ZenBaseTransfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZenBaseTransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZenBaseTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZenBaseTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZenBaseTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZenBaseTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZenBaseTransfer represents a Transfer event raised by the ZenBase contract. +type ZenBaseTransfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_ZenBase *ZenBaseFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ZenBaseTransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZenBase.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &ZenBaseTransferIterator{contract: _ZenBase.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_ZenBase *ZenBaseFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ZenBaseTransfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZenBase.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZenBaseTransfer) + if err := _ZenBase.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_ZenBase *ZenBaseFilterer) ParseTransfer(log types.Log) (*ZenBaseTransfer, error) { + event := new(ZenBaseTransfer) + if err := _ZenBase.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts index 29423f3970..7f09a923a8 100644 --- a/contracts/hardhat.config.ts +++ b/contracts/hardhat.config.ts @@ -22,9 +22,15 @@ const config: HardhatUserConfig = { solidity: { version: "0.8.20", settings: { + viaIR: true, optimizer: { enabled: true, runs: 1000, + details: { + yulDetails: { + optimizerSteps: "u", + }, + }, }, outputSelection: { "*": { "*": [ "*" ], "": [ "*" ] } } }, diff --git a/contracts/src/system/Logger.sol b/contracts/src/system/Logger.sol new file mode 100644 index 0000000000..90abeddf3b --- /dev/null +++ b/contracts/src/system/Logger.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +library Logger { + // Define the event with a string parameter + event LogMessage(string message); + + // Function to emit the LogMessage event + function emitLog(string calldata message) external { + emit LogMessage(message); + } +} \ No newline at end of file diff --git a/contracts/src/system/SystemDeployer.sol b/contracts/src/system/SystemDeployer.sol new file mode 100644 index 0000000000..126e97458b --- /dev/null +++ b/contracts/src/system/SystemDeployer.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: Apache 2 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "./TransactionsAnalyzer.sol"; + +contract SystemDeployer { + event SystemContractDeployed(string name, address contractAddress); + + constructor(address eoaAdmin) { + deployAnalyzer(eoaAdmin); + } + + function deployAnalyzer(address eoaAdmin) internal { + TransactionsAnalyzer transactionsAnalyzer = new TransactionsAnalyzer(); + bytes memory callData = abi.encodeWithSelector(transactionsAnalyzer.initialize.selector, eoaAdmin, msg.sender); + address transactionsAnalyzerProxy = deployProxy(address(transactionsAnalyzer), eoaAdmin, callData); + + emit SystemContractDeployed("TransactionsAnalyzer", transactionsAnalyzerProxy); + } + + function deployProxy(address _logic, address _admin, bytes memory _data) internal returns (address proxyAddress) { + TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy( + _logic, // Address of the logic contract + _admin, // Address of the admin (who can upgrade the proxy) + _data // Initialization data (can be empty if not required) + ); + + proxyAddress = address(proxy); // Store proxy address for reference + } +} \ No newline at end of file diff --git a/contracts/src/system/TransactionDecoder.sol b/contracts/src/system/TransactionDecoder.sol new file mode 100644 index 0000000000..5be0f3bb1c --- /dev/null +++ b/contracts/src/system/TransactionDecoder.sol @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; + + +library TransactionDecoder { + using MessageHashUtils for bytes32; + using ECDSA for bytes32; + + struct Transaction { + uint8 txType; + uint256 chainId; + uint256 nonce; + uint256 gasPrice; + uint256 gasLimit; + address to; + uint256 value; + bytes data; + uint8 v; + bytes32 r; + bytes32 s; + uint256 maxPriorityFeePerGas; + uint256 maxFeePerGas; + address[] accessList; + } + + function recoverSender(Transaction calldata txData) external pure returns (address sender) { + // Step 1: Hash the transaction data excluding the signature fields (v, r, s) + bytes32 dataHash = keccak256( + abi.encode( + txData.txType, + txData.chainId, + txData.nonce, + txData.gasPrice, + txData.gasLimit, + txData.to, + txData.value, + txData.data, + txData.maxPriorityFeePerGas, + txData.maxFeePerGas, + txData.accessList + ) + ); + + // Step 2: Prefix the hash with the standard Ethereum message prefix + bytes32 ethSignedHash = dataHash.toEthSignedMessageHash(); + + // Step 3: Recover the address using the signature parameters + sender = ECDSA.recover(ethSignedHash, txData.v, txData.r, txData.s); + + return sender; + } + + + function decode(bytes calldata rawTransaction) internal pure returns (Transaction memory) { + require(rawTransaction.length > 0, "Empty transaction data"); + uint8 _txType = uint8(rawTransaction[0]); + + if (_txType == 0) { + return decodeLegacyTransaction(rawTransaction); + } else if (_txType == 1) { + return decodeEIP2930Transaction(rawTransaction); + } else if (_txType == 2) { + return decodeEIP1559Transaction(rawTransaction); + } else { + revert("Unsupported transaction type"); + } + } + + function decodeLegacyTransaction(bytes calldata rawTransaction) private pure returns (Transaction memory) { + Transaction memory _tx; + _tx.txType = 0; + + (_tx.nonce, _tx.gasPrice, _tx.gasLimit, _tx.to, _tx.value, _tx.data, _tx.v, _tx.r, _tx.s) = + abi.decode(rawTransaction, (uint256, uint256, uint256, address, uint256, bytes, uint8, bytes32, bytes32)); + + return _tx; + } + + function decodeEIP2930Transaction(bytes calldata rawTransaction) private pure returns (Transaction memory) { + Transaction memory _tx; + _tx.txType = 1; + + (_tx.chainId, _tx.nonce, _tx.gasPrice, _tx.gasLimit, _tx.to, _tx.value, _tx.data, _tx.accessList, _tx.v, _tx.r, _tx.s) = + abi.decode(rawTransaction[1:], (uint256, uint256, uint256, uint256, address, uint256, bytes, address[], uint8, bytes32, bytes32)); + + return _tx; + } + + function decodeEIP1559Transaction(bytes calldata rawTransaction) private pure returns (Transaction memory) { + Transaction memory _tx; + _tx.txType = 2; + + (_tx.chainId, _tx.nonce, _tx.maxPriorityFeePerGas, _tx.maxFeePerGas, _tx.gasLimit, _tx.to, _tx.value, _tx.data, _tx.accessList, _tx.v, _tx.r, _tx.s) = + abi.decode(rawTransaction[1:], (uint256, uint256, uint256, uint256, uint256, address, uint256, bytes, address[], uint8, bytes32, bytes32)); + + return _tx; + } + + function getTo(Transaction memory _tx) internal pure returns (address) { + return _tx.to; + } + + function getValue(Transaction memory _tx) internal pure returns (uint256) { + return _tx.value; + } + + function getData(Transaction memory _tx) internal pure returns (bytes memory) { + return _tx.data; + } + + function getNonce(Transaction memory _tx) internal pure returns (uint256) { + return _tx.nonce; + } + + function getGasPrice(Transaction memory _tx) internal pure returns (uint256) { + if (_tx.txType == 2) { + return _tx.maxFeePerGas; + } + return _tx.gasPrice; + } +} \ No newline at end of file diff --git a/contracts/src/system/TransactionsAnalyzer.sol b/contracts/src/system/TransactionsAnalyzer.sol new file mode 100644 index 0000000000..0266989d64 --- /dev/null +++ b/contracts/src/system/TransactionsAnalyzer.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: Apache 2 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/access/AccessControl.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import "./TransactionDecoder.sol"; + + +interface OnBlockEndCallback { + function onBlockEnd(TransactionDecoder.Transaction[] calldata transactions) external; +} + +//TODO: @PR Review - Pick appropriate name +contract TransactionsAnalyzer is Initializable, AccessControl{ + bytes32 public constant EOA_ADMIN_ROLE = keccak256("EOA_ADMIN_ROLE"); + bytes32 public constant HOOK_CALLER_ROLE = keccak256("HOOK_CALLER_ROLE"); + + struct Receipt { + uint8 _type; + bytes postState; + uint64 Status; + /* + CumulativeGasUsed uint64 + Bloom Bloom + Logs []*Log + + TxHash common.Hash + ContractAddress common.Address + GasUsed uint64 + EffectiveGasPrice *big.In + BlobGasUsed uint64 + BlobGasPrice *big.Int + + BlockHash common.Ha + BlockNumber *big.Int + TransactionIndex uint + */ + } + + struct BlockTransactions { + bytes[] transactions; + } + + OnBlockEndCallback[] onBlockEndListeners; + + function initialize(address eoaAdmin, address authorizedCaller) public initializer { + _grantRole(DEFAULT_ADMIN_ROLE, eoaAdmin); + _grantRole(EOA_ADMIN_ROLE, eoaAdmin); + _grantRole(HOOK_CALLER_ROLE, authorizedCaller); + } + + function addOnBlockEndCallback(address callbackAddress) public onlyRole(EOA_ADMIN_ROLE) { + onBlockEndListeners.push(OnBlockEndCallback(callbackAddress)); + } + + function onBlock(BlockTransactions calldata _block) public onlyRole(HOOK_CALLER_ROLE) { + if (_block.transactions.length == 0) { + return; + } + + TransactionDecoder.Transaction[] memory transactions = new TransactionDecoder.Transaction[](_block.transactions.length); + + for (uint256 i = 0; i < _block.transactions.length; ++i) { + transactions[i] = (TransactionDecoder.decode(_block.transactions[i])); + } + + + for (uint256 i = 0; i < onBlockEndListeners.length; ++i) { + OnBlockEndCallback callback = onBlockEndListeners[i]; + callback.onBlockEnd(transactions); + } + } +} \ No newline at end of file diff --git a/contracts/src/zen/ZenBase.sol b/contracts/src/zen/ZenBase.sol new file mode 100644 index 0000000000..1265c06ba2 --- /dev/null +++ b/contracts/src/zen/ZenBase.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: Apache 2 +pragma solidity ^0.8.0; + + +// Import OpenZeppelin Contracts +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "../system/TransactionsAnalyzer.sol"; +import "../system/TransactionDecoder.sol"; +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; + + + +/** + * @title ZenBase + * @dev ERC20 Token with minting functionality. + */ +contract ZenBase is ERC20, Ownable, OnBlockEndCallback { + /** + * @dev Constructor that gives msg.sender all of existing tokens. + * You can customize the initial supply as needed. + */ + constructor(address transactionsAnalyzer, string memory name, string memory symbol) ERC20(name, symbol) Ownable(msg.sender) { + _caller = transactionsAnalyzer; + } + + address private _caller; + + + modifier onlyCaller() { + require(msg.sender == _caller, "Caller: caller is not the designated address"); + _; + } + + function onBlockEnd(TransactionDecoder.Transaction[] calldata transactions) external override onlyCaller { + // Implement custom logic here + for (uint256 i=0; i 2 { + executor.logger.Crit("Bootstrapping of network failed! System contract hooks have not been initialised after genesis.") + } + // fromTxIndex - Here we start from the len of the successful transactions; As long as we have the exact same successful transactions in a batch, // we will start from the same place. - ccSuccessfulTxs, _, ccReceipts, createdContractsSyn, err := executor.processTransactions(ctx, batch, len(successfulTxs), syntheticTransactions, stateDB, context.ChainConfig, true) + onBatchTxOffset := 0 + if onBlockTx != nil { + onBatchTxOffset = 1 + } + + ccSuccessfulTxs, _, ccReceipts, createdContractsSyn, err := executor.processTransactions(ctx, batch, len(successfulTxs)+onBatchTxOffset, syntheticTransactions, stateDB, context.ChainConfig, true) if err != nil { return nil, err } - if err = executor.verifyInboundCrossChainTransactions(syntheticTransactions, ccSuccessfulTxs, ccReceipts); err != nil { + if err = executor.verifySyntheticTransactionsSuccess(syntheticTransactions, ccSuccessfulTxs, ccReceipts); err != nil { return nil, fmt.Errorf("batch computation failed due to cross chain messages. Cause: %w", err) } @@ -245,25 +280,40 @@ func (executor *batchExecutor) ComputeBatch(ctx context.Context, context *BatchE l.BlockHash = copyBatch.Hash() } } + + commitFunc := func(deleteEmptyObjects bool) (gethcommon.Hash, error) { + executor.stateDBMutex.Lock() + defer executor.stateDBMutex.Unlock() + h, err := stateDB.Commit(copyBatch.Number().Uint64(), deleteEmptyObjects) + if err != nil { + return gethcommon.Hash{}, fmt.Errorf("commit failure for batch %d. Cause: %w", batch.SeqNo(), err) + } + trieDB := executor.storage.TrieDB() + err = trieDB.Commit(h, false) + + // When system contract deployment genesis batch is commited, initialize executor's addresses for the hooks. + // Further restarts will call into Load() which will take the receipts for batch number 2 (which should never be deleted) + // and reinitialize them. + if err == nil && batch.Header.SequencerOrderNo.Uint64() == 2 { + return h, executor.initializeSystemContracts(ctx, batch, allReceipts) + } + + return h, err + } + maps.Copy(createdContracts, createdContractsSyn) return &ComputedBatch{ Batch: ©Batch, Receipts: allReceipts, CreatedContracts: createdContracts, - Commit: func(deleteEmptyObjects bool) (gethcommon.Hash, error) { - executor.stateDBMutex.Lock() - defer executor.stateDBMutex.Unlock() - h, err := stateDB.Commit(copyBatch.Number().Uint64(), deleteEmptyObjects) - if err != nil { - return gethcommon.Hash{}, fmt.Errorf("commit failure for batch %d. Cause: %w", batch.SeqNo(), err) - } - trieDB := executor.storage.TrieDB() - err = trieDB.Commit(h, false) - return h, err - }, + Commit: commitFunc, }, nil } +func (executor *batchExecutor) initializeSystemContracts(_ context.Context, batch *core.Batch, receipts types.Receipts) error { + return executor.systemContracts.Initialize(batch, receipts) +} + func (executor *batchExecutor) ExecuteBatch(ctx context.Context, batch *core.Batch) (types.Receipts, map[gethcommon.Hash][]*gethcommon.Address, error) { defer core.LogMethodDuration(executor.logger, measure.NewStopwatch(), "Executed batch", log.BatchHashKey, batch.Hash()) @@ -414,7 +464,7 @@ func (executor *batchExecutor) populateHeader(batch *core.Batch, receipts types. } } -func (executor *batchExecutor) verifyInboundCrossChainTransactions(transactions common.L2PricedTransactions, executedTxs types.Transactions, receipts types.Receipts) error { +func (executor *batchExecutor) verifySyntheticTransactionsSuccess(transactions common.L2PricedTransactions, executedTxs types.Transactions, receipts types.Receipts) error { if len(transactions) != executedTxs.Len() { return fmt.Errorf("some synthetic transactions have not been executed") } diff --git a/go/enclave/enclave.go b/go/enclave/enclave.go index f31f7f6398..d969f7e917 100644 --- a/go/enclave/enclave.go +++ b/go/enclave/enclave.go @@ -14,6 +14,7 @@ import ( "github.com/ten-protocol/go-ten/go/enclave/evm/ethchainadapter" "github.com/ten-protocol/go-ten/go/enclave/gas" "github.com/ten-protocol/go-ten/go/enclave/storage" + "github.com/ten-protocol/go-ten/go/enclave/system" "github.com/ten-protocol/go-ten/go/enclave/txpool" "github.com/ten-protocol/go-ten/go/enclave/components" @@ -67,6 +68,7 @@ type enclaveImpl struct { subscriptionManager *events.SubscriptionManager crossChainProcessors *crosschain.Processors sharedSecretProcessor *components.SharedSecretProcessor + scb system.SystemContractCallbacks chain l2chain.ObscuroChain service nodetype.NodeType @@ -167,10 +169,13 @@ func NewEnclave( crossChainProcessors := crosschain.New(&config.MessageBusAddress, storage, big.NewInt(config.ObscuroChainID), logger) + systemContractsWallet := system.GetPlaceholderWallet(chainConfig.ChainID, logger) + scb := system.NewSystemContractCallbacks(systemContractsWallet, logger) + gasOracle := gas.NewGasOracle() blockProcessor := components.NewBlockProcessor(storage, crossChainProcessors, gasOracle, logger) registry := components.NewBatchRegistry(storage, logger) - batchExecutor := components.NewBatchExecutor(storage, registry, *config, gethEncodingService, crossChainProcessors, genesis, gasOracle, chainConfig, config.GasBatchExecutionLimit, logger) + batchExecutor := components.NewBatchExecutor(storage, registry, *config, gethEncodingService, crossChainProcessors, genesis, gasOracle, chainConfig, config.GasBatchExecutionLimit, scb, logger) sigVerifier, err := components.NewSignatureValidator(storage) rProducer := components.NewRollupProducer(enclaveKey.EnclaveID(), storage, registry, logger) if err != nil { @@ -271,6 +276,7 @@ func NewEnclave( logger: logger, debugger: debug, stopControl: stopcontrol.New(), + scb: scb, chain: chain, registry: registry, @@ -878,7 +884,12 @@ func (e *enclaveImpl) EnclavePublicConfig(context.Context) (*common.EnclavePubli if systemError != nil { return nil, systemError } - return &common.EnclavePublicConfig{L2MessageBusAddress: address}, nil + analyzerAddress := e.scb.TransactionAnalyzerAddress() + + return &common.EnclavePublicConfig{ + L2MessageBusAddress: address, + TransactionAnalyzerAddress: *analyzerAddress, + }, nil } func (e *enclaveImpl) rejectBlockErr(ctx context.Context, cause error) *errutil.BlockRejectError { diff --git a/go/enclave/nodetype/sequencer.go b/go/enclave/nodetype/sequencer.go index d9ee58c084..abb6270945 100644 --- a/go/enclave/nodetype/sequencer.go +++ b/go/enclave/nodetype/sequencer.go @@ -16,6 +16,7 @@ import ( "github.com/ten-protocol/go-ten/go/common/measure" "github.com/ten-protocol/go-ten/go/enclave/evm/ethchainadapter" "github.com/ten-protocol/go-ten/go/enclave/storage" + "github.com/ten-protocol/go-ten/go/enclave/system" "github.com/ten-protocol/go-ten/go/enclave/txpool" "github.com/ten-protocol/go-ten/go/common/compression" @@ -135,7 +136,7 @@ func (s *sequencer) CreateBatch(ctx context.Context, skipBatchIfEmpty bool) erro // won't be committed by the producer. func (s *sequencer) createGenesisBatch(ctx context.Context, block *types.Header) error { s.logger.Info("Initializing genesis state", log.BlockHashKey, block.Hash()) - batch, msgBusTx, err := s.batchProducer.CreateGenesisState( + batch, _, err := s.batchProducer.CreateGenesisState( ctx, block.Hash(), uint64(time.Now().Unix()), @@ -169,13 +170,30 @@ func (s *sequencer) createGenesisBatch(ctx context.Context, block *types.Header) // errors in unit test seem to suggest that batch 2 was received before batch 1 // this ensures that there is enough gap so that batch 1 is issued before batch 2 time.Sleep(time.Second) + + wallet := system.GetPlaceholderWallet(s.chainConfig.ChainID, s.logger) + msgBusTx, err := system.MessageBusInitTransaction(wallet, s.logger) + if err != nil { + s.logger.Error("[SystemContracts] Failed to create message bus contract", log.ErrKey, err) + return err + } + + systemDeployerTx, err := system.SystemDeployerInitTransaction(wallet, s.logger, wallet.Address()) + if err != nil { + s.logger.Error("[SystemContracts] Failed to create system deployer contract", log.ErrKey, err) + return err + } + // produce batch #2 which has the message bus and any other system contracts cb, err := s.produceBatch( ctx, big.NewInt(0).Add(batch.Header.SequencerOrderNo, big.NewInt(1)), block.Hash(), batch.Hash(), - common.L2Transactions{msgBusTx}, + common.L2Transactions{ + msgBusTx, + systemDeployerTx, + }, uint64(time.Now().Unix()), false, ) @@ -186,7 +204,7 @@ func (s *sequencer) createGenesisBatch(ctx context.Context, block *types.Header) s.logger.Debug("Skipping batch production, no transactions to execute") return nil } - return fmt.Errorf(" failed producing batch. Cause: %w", err) + return fmt.Errorf("[SystemContracts] failed producing batch. Cause: %w", err) } if len(cb.Receipts) == 0 || cb.Receipts[0].TxHash.Hex() != msgBusTx.Hash().Hex() { @@ -195,7 +213,15 @@ func (s *sequencer) createGenesisBatch(ctx context.Context, block *types.Header) return err } - s.logger.Info("Message Bus Contract minted successfully", "address", cb.Receipts[0].ContractAddress.Hex()) + systemAddresses, err := system.DeriveAddresses(cb.Receipts[1]) + if err != nil { + s.logger.Error("Failed to derive system contract addresses", log.ErrKey, err) + return err + } + + s.logger.Info("[SystemContracts] Deployer initialized", "transactionAnalyzer", systemAddresses.ToString()) + + s.logger.Info("[SystemContracts] Message Bus Contract minted successfully", "address", cb.Receipts[0].ContractAddress.Hex()) return nil } diff --git a/go/host/host.go b/go/host/host.go index 219a9185bf..e77f9183a8 100644 --- a/go/host/host.go +++ b/go/host/host.go @@ -47,8 +47,9 @@ type host struct { metricRegistry gethmetrics.Registry // l2MessageBusAddress is fetched from the enclave but cache it here because it never changes - l2MessageBusAddress *gethcommon.Address - newHeads chan *common.BatchHeader + l2MessageBusAddress *gethcommon.Address + transactionAnalyzerAddress *gethcommon.Address + newHeads chan *common.BatchHeader } type batchListener struct { @@ -236,20 +237,23 @@ func (h *host) HealthCheck(ctx context.Context) (*hostcommon.HealthCheck, error) // ObscuroConfig returns info on the Obscuro network func (h *host) TenConfig() (*common.TenNetworkInfo, error) { - if h.l2MessageBusAddress == nil { + if h.l2MessageBusAddress == nil || h.transactionAnalyzerAddress == nil { publicCfg, err := h.EnclaveClient().EnclavePublicConfig(context.Background()) if err != nil { return nil, responses.ToInternalError(fmt.Errorf("unable to get L2 message bus address - %w", err)) } h.l2MessageBusAddress = &publicCfg.L2MessageBusAddress + h.transactionAnalyzerAddress = &publicCfg.TransactionAnalyzerAddress } + return &common.TenNetworkInfo{ ManagementContractAddress: h.config.ManagementContractAddress, L1StartHash: h.config.L1StartHash, - MessageBusAddress: h.config.MessageBusAddress, - L2MessageBusAddress: *h.l2MessageBusAddress, - ImportantContracts: h.services.L1Publisher().GetImportantContracts(), + MessageBusAddress: h.config.MessageBusAddress, + L2MessageBusAddress: *h.l2MessageBusAddress, + ImportantContracts: h.services.L1Publisher().GetImportantContracts(), + TransactionAnalyzerAddress: *h.transactionAnalyzerAddress, }, nil } diff --git a/go/host/rpc/clientapi/client_api_ten.go b/go/host/rpc/clientapi/client_api_ten.go index 542d44de41..5db9bf26ac 100644 --- a/go/host/rpc/clientapi/client_api_ten.go +++ b/go/host/rpc/clientapi/client_api_ten.go @@ -40,6 +40,7 @@ type ChecksumFormattedTenNetworkConfig struct { MessageBusAddress gethcommon.AddressEIP55 L2MessageBusAddress gethcommon.AddressEIP55 ImportantContracts map[string]gethcommon.AddressEIP55 // map of contract name to address + TransactionAnalyzer gethcommon.AddressEIP55 } func checksumFormatted(info *common.TenNetworkInfo) *ChecksumFormattedTenNetworkConfig { @@ -53,5 +54,6 @@ func checksumFormatted(info *common.TenNetworkInfo) *ChecksumFormattedTenNetwork MessageBusAddress: gethcommon.AddressEIP55(info.MessageBusAddress), L2MessageBusAddress: gethcommon.AddressEIP55(info.L2MessageBusAddress), ImportantContracts: importantContracts, + TransactionAnalyzer: gethcommon.AddressEIP55(info.TransactionAnalyzerAddress), } } diff --git a/go/obsclient/authclient.go b/go/obsclient/authclient.go index c15e627f66..98bc2a00a6 100644 --- a/go/obsclient/authclient.go +++ b/go/obsclient/authclient.go @@ -192,7 +192,7 @@ func (ac *AuthObsClient) BalanceAt(ctx context.Context, blockNumber *big.Int) (* return (*big.Int)(&result), err } -func (ac *AuthObsClient) SubscribeFilterLogs(ctx context.Context, filterCriteria common.FilterCriteria, ch chan types.Log) (ethereum.Subscription, error) { +func (ac *AuthObsClient) SubscribeFilterLogs(ctx context.Context, filterCriteria ethereum.FilterQuery, ch chan<- types.Log) (ethereum.Subscription, error) { return ac.rpcClient.Subscribe(ctx, rpc.SubscribeNamespace, ch, rpc.SubscriptionTypeLogs, filterCriteria) } @@ -250,6 +250,46 @@ func (ac *AuthObsClient) EstimateGasAndGasPrice(txData types.TxData) types.TxDat } } +func (ac *AuthObsClient) CodeAt(context.Context, gethcommon.Address, *big.Int) ([]byte, error) { + panic("not implemented") + + return nil, errors.New("not implemented") +} + +func (ac *AuthObsClient) FilterLogs(context.Context, ethereum.FilterQuery) ([]types.Log, error) { + panic("not implemented") + + return nil, errors.New("not implemented") +} + +func (ac *AuthObsClient) HeaderByNumber(context.Context, *big.Int) (*types.Header, error) { + panic("not implemented") + + return nil, errors.New("not implemented") +} + +func (ac *AuthObsClient) PendingCodeAt(context.Context, gethcommon.Address) ([]byte, error) { + panic("not implemented") + + return nil, errors.New("not implemented") +} + +func (ac *AuthObsClient) PendingNonceAt(context.Context, gethcommon.Address) (uint64, error) { + panic("not implemented") + + return 0, errors.New("not implemented") +} + +func (ac *AuthObsClient) SuggestGasPrice(context.Context) (*big.Int, error) { + panic("not implemented") + return nil, errors.New("not implemented") +} + +// SuggestGasTipCap implements bind.ContractBackend. +func (ac *AuthObsClient) SuggestGasTipCap(ctx context.Context) (*big.Int, error) { + panic("unimplemented") +} + // GetPrivateTransactions retrieves the receipts for the specified account (must be registered on this client), returns requested range of receipts and the total number of receipts for that acc func (ac *AuthObsClient) GetPrivateTransactions(ctx context.Context, address *gethcommon.Address, pagination common.QueryPagination) (types.Receipts, uint64, error) { queryParam := &common.ListPrivateTransactionsQueryParams{ diff --git a/go/rpc/encrypted_client.go b/go/rpc/encrypted_client.go index abc4030fb5..bfff690860 100644 --- a/go/rpc/encrypted_client.go +++ b/go/rpc/encrypted_client.go @@ -235,7 +235,7 @@ func (c *EncRPCClient) decryptResponse(encryptedBytes []byte) ([]byte, error) { // creates a subscription to the TEN node, but decrypts the messages from that channel and forwards them to the `ch` func (c *EncRPCClient) logSubscription(ctx context.Context, namespace string, ch interface{}, args ...any) (*gethrpc.ClientSubscription, error) { - outboundChannel, ok := ch.(chan types.Log) + outboundChannel, ok := ch.(chan<- types.Log) if !ok { return nil, fmt.Errorf("expected a channel of type `chan types.Log`, got %T", ch) } @@ -281,7 +281,7 @@ func (c *EncRPCClient) logSubscription(ctx context.Context, namespace string, ch return backendSub, nil } -func (c *EncRPCClient) onMessage(encLog []byte, outboundChannel chan types.Log) error { +func (c *EncRPCClient) onMessage(encLog []byte, outboundChannel chan<- types.Log) error { jsonLogs, err := c.decryptResponse(encLog) if err != nil { c.logger.Error("could not decrypt logs received from subscription.", log.ErrKey, err) diff --git a/integration/simulation/simulation.go b/integration/simulation/simulation.go index b6d16e105e..bd9761c644 100644 --- a/integration/simulation/simulation.go +++ b/integration/simulation/simulation.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" gethparams "github.com/ethereum/go-ethereum/params" "github.com/ten-protocol/go-ten/contracts/generated/MessageBus" + "github.com/ten-protocol/go-ten/contracts/generated/ZenBase" "github.com/ten-protocol/go-ten/go/common" "github.com/ten-protocol/go-ten/go/common/errutil" "github.com/ten-protocol/go-ten/go/common/log" @@ -190,7 +191,7 @@ func (s *Simulation) trackLogs() { channel := make(chan types.Log, 1000) // To exercise the filtering mechanism, we subscribe for HOC events only, ignoring POC events. - hocFilter := common.FilterCriteria{ + hocFilter := ethereum.FilterQuery{ Addresses: []gethcommon.Address{gethcommon.HexToAddress("0x" + testcommon.HOCAddr)}, } sub, err := client.SubscribeFilterLogs(context.Background(), hocFilter, channel) @@ -217,6 +218,27 @@ func (s *Simulation) prefundTenAccounts() { testcommon.PrefundWallets(s.ctx, faucetWallet, faucetClient, nonce, s.Params.Wallets.AllObsWallets(), allocObsWallets, s.Params.ReceiptTimeout) } +func (s *Simulation) deployTenZen() { + auth, err := bind.NewKeyedTransactorWithChainID(s.Params.Wallets.L2FaucetWallet.PrivateKey(), s.Params.Wallets.L2FaucetWallet.ChainID()) + if err != nil { + panic(fmt.Errorf("failed to create transactor in order to bootstrap sim test: %w", err)) + } + + cfg, err := s.RPCHandles.TenWalletRndClient(s.Params.Wallets.L2FaucetWallet).GetConfig() + if err != nil { + panic(err) + } + + _, tx, _, err := ZenBase.DeployZenBase(auth, s.RPCHandles.TenWalletRndClient(s.Params.Wallets.L2FaucetWallet), cfg.TransactionAnalyzerAddress, "zen", "zen") + if err != nil { + panic(fmt.Errorf("failed to deploy zen base contract: %w", err)) + } + + if err = testcommon.AwaitReceipt(s.ctx, s.RPCHandles.TenWalletRndClient(s.Params.Wallets.L2FaucetWallet), tx.Hash(), s.Params.ReceiptTimeout); err != nil { + panic(fmt.Errorf("failed to deploy zen base contract: %w", err)) + } +} + // This deploys an ERC20 contract on Ten, which is used for token arithmetic. func (s *Simulation) deployTenERC20s() { tokens := []testcommon.ERC20{testcommon.HOC, testcommon.POC} From 71729d34dca01ee1d9b3dc1d72541c595f279aca Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Tue, 24 Sep 2024 11:20:59 +0300 Subject: [PATCH 02/23] Testing issues. --- contracts/src/zen/ZenBase.sol | 14 +-- go/common/headers.go | 37 ++++++ go/common/rpc/generated/enclave.pb.go | 22 +++- go/common/rpc/generated/enclave.proto | 3 +- go/config/enclave_config.go | 2 +- go/enclave/rpc/EstimateGas.go | 1 + go/enclave/rpc_server.go | 5 +- go/enclave/system/contracts.go | 110 +++++++++++++++++ go/enclave/system/hooks.go | 148 +++++++++++++++++++++++ go/host/host.go | 8 +- go/host/rpc/clientapi/client_api_ten.go | 24 ++-- go/host/rpc/enclaverpc/enclave_client.go | 3 +- go/obsclient/authclient.go | 39 +++--- integration/simulation/simulation.go | 117 +++++++++++++++--- 14 files changed, 467 insertions(+), 66 deletions(-) create mode 100644 go/enclave/system/contracts.go create mode 100644 go/enclave/system/hooks.go diff --git a/contracts/src/zen/ZenBase.sol b/contracts/src/zen/ZenBase.sol index 1265c06ba2..77d08a776c 100644 --- a/contracts/src/zen/ZenBase.sol +++ b/contracts/src/zen/ZenBase.sol @@ -15,12 +15,12 @@ import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; * @title ZenBase * @dev ERC20 Token with minting functionality. */ -contract ZenBase is ERC20, Ownable, OnBlockEndCallback { +contract ZenBase { /** * @dev Constructor that gives msg.sender all of existing tokens. * You can customize the initial supply as needed. */ - constructor(address transactionsAnalyzer, string memory name, string memory symbol) ERC20(name, symbol) Ownable(msg.sender) { + constructor(address transactionsAnalyzer, string memory , string memory) { _caller = transactionsAnalyzer; } @@ -32,12 +32,12 @@ contract ZenBase is ERC20, Ownable, OnBlockEndCallback { _; } - function onBlockEnd(TransactionDecoder.Transaction[] calldata transactions) external override onlyCaller { + function onBlockEnd(TransactionDecoder.Transaction[] calldata transactions) external view onlyCaller { // Implement custom logic here for (uint256 i=0; i 0 { + break + } + time.Sleep(2 * time.Second) + } - if err = testcommon.AwaitReceipt(s.ctx, s.RPCHandles.TenWalletRndClient(s.Params.Wallets.L2FaucetWallet), tx.Hash(), s.Params.ReceiptTimeout); err != nil { - panic(fmt.Errorf("failed to deploy zen base contract: %w", err)) - } + //auth.GasLimit = 5_000_000 + + /*abi, err := ZenBase.ZenBaseMetaData.GetAbi() + if err != nil { + panic(err) + } + + packedParams, err := abi.Constructor.Inputs.Pack(cfg.TransactionAnalyzerAddress, "zen", "zen") + if err != nil { + panic(err) + } + + initCode := make([]byte, 0) + initCode = append(initCode, gethcommon.FromHex(ZenBase.ZenBaseMetaData.Bin)...) + initCode = append(initCode, packedParams...) + + owner := s.Params.Wallets.L2FaucetWallet + + deployContractTxData := types.DynamicFeeTx{ + Nonce: NextNonce(s.ctx, s.RPCHandles, owner), + Gas: 5_000_000, + GasFeeCap: gethcommon.Big1, // This field is used to derive the gas price for dynamic fee transactions. + Data: initCode, + GasTipCap: gethcommon.Big1, + } + + deployContractTx := s.RPCHandles.TenWalletRndClient(owner).EstimateGasAndGasPrice(&deployContractTxData) + signedTx, err := owner.SignTransaction(deployContractTx) + if err != nil { + panic(err) + } + + err = rpc.SendTransaction(s.ctx, signedTx) + if err != nil { + panic(err) + } */ + + owner := s.Params.Wallets.L2FaucetWallet + auth.GasPrice = big.NewInt(0).SetUint64(gethparams.InitialBaseFee) + auth.Context = context.Background() + + _, signedTx, _, err := ZenBase.DeployZenBase(auth, s.RPCHandles.TenWalletRndClient(owner), cfg.TransactionAnalyzerAddress, "zen", "zen") + if err != nil { + panic(fmt.Errorf("failed to deploy zen base contract: %w", err)) + } + + if err = testcommon.AwaitReceipt(s.ctx, s.RPCHandles.TenWalletRndClient(owner), signedTx.Hash(), s.Params.ReceiptTimeout); err != nil { + panic(fmt.Errorf("failed to deploy zen base contract: %w", err)) + } + + // + rpc := s.RPCHandles.TenWalletClient(owner.Address(), 1) + _, err = rpc.TransactionReceipt(s.ctx, signedTx.Hash()) + if err != nil { + panic(err) + } + + // s.ZenBaseAddress = address + }() + wg.Wait() } // This deploys an ERC20 contract on Ten, which is used for token arithmetic. func (s *Simulation) deployTenERC20s() { + testlog.Logger().Info("Deploying TEN ERC20 contracts") tokens := []testcommon.ERC20{testcommon.HOC, testcommon.POC} wg := sync.WaitGroup{} @@ -284,6 +365,8 @@ func (s *Simulation) deployTenERC20s() { // Sends an amount from the faucet to each L1 account, to pay for transactions. func (s *Simulation) prefundL1Accounts() { + testlog.Logger().Info("Prefunding L1 wallets") + for _, w := range s.Params.Wallets.SimEthWallets { ethClient := s.RPCHandles.RndEthClient() receiver := w.Address() @@ -317,6 +400,8 @@ func (s *Simulation) prefundL1Accounts() { } func (s *Simulation) checkHealthStatus() { + testlog.Logger().Info("Checking health status") + for _, client := range s.RPCHandles.TenClients { err := retry.Do(func() error { healthy, err := client.Health() From 3a9ce8a9b9e77f4e7ac847aaee41020893f0ce06 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Tue, 24 Sep 2024 14:41:16 +0300 Subject: [PATCH 03/23] Deploys on sim tests. --- contracts/generated/Structs/Structs.go | 252 ++++++++++++++++++ .../SystemDeployer/SystemDeployer.go | 2 +- .../TransactionsAnalyzer.go | 2 +- contracts/generated/ZenBase/ZenBase.go | 39 +-- contracts/src/system/OnBlockEndCallback.sol | 8 + contracts/src/system/Transaction.sol | 56 ++++ contracts/src/system/TransactionDecoder.sol | 89 +------ contracts/src/system/TransactionsAnalyzer.sol | 10 +- contracts/src/zen/ZenBase.sol | 47 ++-- go/enclave/enclave.go | 3 + go/enclave/gas/oracle.go | 6 +- go/enclave/rpc/EstimateGas.go | 1 - go/obsclient/authclient.go | 3 +- .../simulation/p2p/in_mem_obscuro_client.go | 80 ++++++ integration/simulation/simulation.go | 70 ++--- 15 files changed, 479 insertions(+), 189 deletions(-) create mode 100644 contracts/generated/Structs/Structs.go create mode 100644 contracts/src/system/OnBlockEndCallback.sol create mode 100644 contracts/src/system/Transaction.sol diff --git a/contracts/generated/Structs/Structs.go b/contracts/generated/Structs/Structs.go new file mode 100644 index 0000000000..390da149de --- /dev/null +++ b/contracts/generated/Structs/Structs.go @@ -0,0 +1,252 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package Structs + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// StructsTransaction is an auto generated low-level Go binding around an user-defined struct. +type StructsTransaction struct { + TxType uint8 + ChainId *big.Int + Nonce *big.Int + GasPrice *big.Int + GasLimit *big.Int + To common.Address + Value *big.Int + Data []byte + V uint8 + R [32]byte + S [32]byte + MaxPriorityFeePerGas *big.Int + MaxFeePerGas *big.Int + AccessList []common.Address +} + +// StructsMetaData contains all meta data concerning the Structs contract. +var StructsMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"accessList\",\"type\":\"address[]\"}],\"internalType\":\"structStructs.Transaction\",\"name\":\"txData\",\"type\":\"tuple\"}],\"name\":\"recoverSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x60806040523461001e5760405161069e61002482393081505061069e90f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c638314c06f0361003657610072565b90816101c09103126100365790565b600080fd5b9060208282031261003657813567ffffffffffffffff8111610036576100619201610027565b90565b6001600160a01b031690565b565b6100a261008861008336600461003b565b6102b6565b604051918291826001600160a01b03909116815260200190565b0390f35b60ff81165b0361003657565b35610061816100a6565b806100ab565b35610061816100bc565b6001600160a01b0381166100ab565b35610061816100cc565b903590601e193682900301821215610036570180359067ffffffffffffffff8211610036576020019136829003831361003657565b903590601e193682900301821215610036570180359067ffffffffffffffff82116100365760200191602082023603831361003657565b90826000939282370152565b919061017b81610174816101859560209181520190565b8095610151565b601f01601f191690565b0190565b90503590610070826100cc565b50610061906020810190610189565b818352602090920191906000825b8282106101c1575050505090565b909192936101f06101e96001926101d88886610196565b6001600160a01b0316815260200190565b9560200190565b939201906101b3565b999b9c9a9895939196949290966101608b019760008c0161021b9160ff169052565b60208b015260408a0152606089015260808801526001600160a01b031660a087015260c086015284820360e08601526102539261015d565b936101008301610261919052565b610120820152808303906101400152610061926101a5565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff8211176102b157604052565b610279565b6102bf816100b2565b6102cb602083016100c2565b6102d7604084016100c2565b906102e4606085016100c2565b926102f1608086016100c2565b6102fd60a087016100db565b9061030a60c088016100c2565b61031760e08901896100e5565b6103246101608b016100c2565b916103326101808c016100c2565b936103416101a08d018d61011a565b97909661034d60405190565b9c8d9c60208e019c61035f9c8e6101f9565b90810382520361036f908261028f565b805190602001206103a9907f19457468657265756d205369676e6564204d6573736167653a0a333200000000600052601c52603c60002090565b906103b761010082016100b2565b906103c561012082016100c2565b90610140016103d3906100c2565b6100619384936103e39391610458565b90929192610550565b6100616100616100619290565b610061906103ec565b6100646100616100619290565b61006190610402565b61044861007094610441606094989795610437608086019a6000870152565b60ff166020850152565b6040830152565b0152565b6040513d6000823e3d90fd5b9091610463846103f9565b61049361048f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a06103ec565b9190565b1161050d57906104b5602094600094936104ac60405190565b94859485610418565b838052039060015afa15610508576000516000916104d28361040f565b6001600160a01b0381166001600160a01b038416146104fb57506104f5836103ec565b91929190565b91506104f56001936103ec565b61044c565b50505061051a600061040f565b9160039190565b634e487b7160e01b600052602160045260246000fd5b6004111561054157565b610521565b9061007082610537565b61055a6000610546565b61056382610546565b0361056c575050565b6105766001610546565b61057f82610546565b036105b3576040517ff645eedf000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b6105bd6002610546565b6105c682610546565b0361060d576105af6105d7836103f9565b6040519182917ffce698f70000000000000000000000000000000000000000000000000000000083526004830190815260200190565b61062061061a6003610546565b91610546565b146106285750565b6105af9061063560405190565b9182917fd78bce0c000000000000000000000000000000000000000000000000000000008352600483019081526020019056fea2646970667358221220c65c0636aae937e4abd84684e03270a4926f575a45974a78aecc6bdde8f5898e64736f6c63430008140033", +} + +// StructsABI is the input ABI used to generate the binding from. +// Deprecated: Use StructsMetaData.ABI instead. +var StructsABI = StructsMetaData.ABI + +// StructsBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use StructsMetaData.Bin instead. +var StructsBin = StructsMetaData.Bin + +// DeployStructs deploys a new Ethereum contract, binding an instance of Structs to it. +func DeployStructs(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Structs, error) { + parsed, err := StructsMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StructsBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Structs{StructsCaller: StructsCaller{contract: contract}, StructsTransactor: StructsTransactor{contract: contract}, StructsFilterer: StructsFilterer{contract: contract}}, nil +} + +// Structs is an auto generated Go binding around an Ethereum contract. +type Structs struct { + StructsCaller // Read-only binding to the contract + StructsTransactor // Write-only binding to the contract + StructsFilterer // Log filterer for contract events +} + +// StructsCaller is an auto generated read-only Go binding around an Ethereum contract. +type StructsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StructsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type StructsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StructsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type StructsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StructsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type StructsSession struct { + Contract *Structs // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StructsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type StructsCallerSession struct { + Contract *StructsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// StructsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type StructsTransactorSession struct { + Contract *StructsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StructsRaw is an auto generated low-level Go binding around an Ethereum contract. +type StructsRaw struct { + Contract *Structs // Generic contract binding to access the raw methods on +} + +// StructsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type StructsCallerRaw struct { + Contract *StructsCaller // Generic read-only contract binding to access the raw methods on +} + +// StructsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type StructsTransactorRaw struct { + Contract *StructsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewStructs creates a new instance of Structs, bound to a specific deployed contract. +func NewStructs(address common.Address, backend bind.ContractBackend) (*Structs, error) { + contract, err := bindStructs(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Structs{StructsCaller: StructsCaller{contract: contract}, StructsTransactor: StructsTransactor{contract: contract}, StructsFilterer: StructsFilterer{contract: contract}}, nil +} + +// NewStructsCaller creates a new read-only instance of Structs, bound to a specific deployed contract. +func NewStructsCaller(address common.Address, caller bind.ContractCaller) (*StructsCaller, error) { + contract, err := bindStructs(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &StructsCaller{contract: contract}, nil +} + +// NewStructsTransactor creates a new write-only instance of Structs, bound to a specific deployed contract. +func NewStructsTransactor(address common.Address, transactor bind.ContractTransactor) (*StructsTransactor, error) { + contract, err := bindStructs(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &StructsTransactor{contract: contract}, nil +} + +// NewStructsFilterer creates a new log filterer instance of Structs, bound to a specific deployed contract. +func NewStructsFilterer(address common.Address, filterer bind.ContractFilterer) (*StructsFilterer, error) { + contract, err := bindStructs(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &StructsFilterer{contract: contract}, nil +} + +// bindStructs binds a generic wrapper to an already deployed contract. +func bindStructs(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := StructsMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Structs *StructsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Structs.Contract.StructsCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Structs *StructsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Structs.Contract.StructsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Structs *StructsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Structs.Contract.StructsTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Structs *StructsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Structs.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Structs *StructsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Structs.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Structs *StructsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Structs.Contract.contract.Transact(opts, method, params...) +} + +// RecoverSender is a free data retrieval call binding the contract method 0x23bc02dd. +// +// Solidity: function recoverSender((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[]) txData) pure returns(address sender) +func (_Structs *StructsCaller) RecoverSender(opts *bind.CallOpts, txData StructsTransaction) (common.Address, error) { + var out []interface{} + err := _Structs.contract.Call(opts, &out, "recoverSender", txData) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// RecoverSender is a free data retrieval call binding the contract method 0x23bc02dd. +// +// Solidity: function recoverSender((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[]) txData) pure returns(address sender) +func (_Structs *StructsSession) RecoverSender(txData StructsTransaction) (common.Address, error) { + return _Structs.Contract.RecoverSender(&_Structs.CallOpts, txData) +} + +// RecoverSender is a free data retrieval call binding the contract method 0x23bc02dd. +// +// Solidity: function recoverSender((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[]) txData) pure returns(address sender) +func (_Structs *StructsCallerSession) RecoverSender(txData StructsTransaction) (common.Address, error) { + return _Structs.Contract.RecoverSender(&_Structs.CallOpts, txData) +} diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 2ae01538b8..be9ec726be 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x6080604052346200002e576200001e62000018620000d1565b620000f4565b604051603f620003818239603f90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b038116036200002e57565b90505190620000888262000099565b906020828203126200002e576200009691620000ab565b620000966200312280380380620000e88162000071565b928339810190620000ba565b620000889062000164565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b62000096906200010b565b620000969062000121565b620001536200014d620000969263ffffffff1690565b60e01b90565b6001600160e01b03191690565b0190565b60405161183281016001600160401b038111828210176200006b57620001918291611832620018f0843990565b03906000f080156200028d576200020d916200020760049262000201620001bc63485cc95562000137565b620001f13386620001cc60405190565b98899460208601908152016001600160a01b0391821681529116602082015260400190565b6020820181038252038562000049565b6200012c565b62000335565b620002887fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69916200023d60405190565b9182918260408082526014908201527f5472616e73616374696f6e73416e616c797a657200000000000000000000000060608201526001600160a01b03909116602082015260800190565b0390a1565b620000ff565b60005b838110620002a75750506000910152565b818101518382015260200162000296565b620002dd620002e76020936200016093620002d1815190565b80835293849260200190565b9586910162000293565b601f01601f191690565b620003276200009694929362000317606084019560008501906001600160a01b03169052565b6001600160a01b03166020830152565b6040818403910152620002b8565b90604051926115308401916001600160401b038311858410176200006b5784936200036993611530620003c08739620002f1565b03906000f080156200028d5762000096906200012c56fe6080604052600080fdfea2646970667358221220d59d030c58851607d5c752c5e8c020b706a96fc11fd5aeb21045e3f6f821a88c64736f6c6343000814003360a060405262000019620000126200019f565b91620001ff565b6040516105e762000681823960805181603001526105e790f35b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b03811603620000ab57565b600080fd5b90505190620000888262000099565b6001600160401b0381116200006b57602090601f01601f19160190565b60005b838110620000f05750506000910152565b8181015183820152602001620000df565b909291926200011a6200011482620000bf565b62000071565b93818552602085019082840111620000ab576200008892620000dc565b9080601f83011215620000ab578151620000969260200162000101565b91606083830312620000ab576200016c8284620000b0565b926200017c8360208301620000b0565b60408201519093906001600160401b038111620000ab5762000096920162000137565b620001c26200153080380380620001b68162000071565b92833981019062000154565b909192565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b6200009690620001d3565b6200009690620001e9565b916200020c919262000288565b604051906108c882016001600160401b038111838210176200006b5782916200024b916108c862000c6885396001600160a01b03909116815260200190565b03906000f0801562000282576200026290620001f4565b608052620000886200027c6080516001600160a01b031690565b62000406565b620001c7565b906200008891620002a4565b6200009662000096620000969290565b90620002b08262000381565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b620002dc83620001f4565b90620002e760405190565b600090a2805162000301620002fd600062000294565b9190565b111562000316576200031391620005a5565b50565b50506200008862000543565b620000967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc62000294565b9062000361620000966200037d92620001f4565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6000813b62000394620002fd8362000294565b14620003b557906200008891620003ae6200009662000322565b016200034d565b620003e882620003c460405190565b634c9c8ce360e01b8152918291600483016001600160a01b03909116815260200190565b0390fd5b6001600160a01b0391821681529116602082015260400190565b6200008890620004156200049b565b817f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91620004506200044660405190565b92839283620003ec565b0390a1620004d1565b620000967fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610362000294565b62000096906200008a565b62000096905462000484565b620000966000620004af6200009662000459565b016200048f565b6200008a62000096620000969290565b6200009690620004b6565b90600091620004e083620004c6565b926001600160a01b0384166001600160a01b03831614620005105762000088929350620003ae6200009662000459565b620003e8846200051f60405190565b633173bdd160e11b8152918291600483016001600160a01b03909116815260200190565b3462000554620002fd600062000294565b116200055c57565b60405163b398979f60e01b8152600490fd5b906200057e6200011483620000bf565b918252565b3d15620005a057620005953d6200056e565b903d6000602084013e565b606090565b6000806200009693620005b6606090565b50805190602001845af4620005ca62000583565b9190620005d857506200064d565b8151600090620005ec620002fd8362000294565b14908162000632575b50620005ff575090565b620003e8906200060e60405190565b639996b31560e01b8152918291600483016001600160a01b03909116815260200190565b905062000645620002fd833b9262000294565b1438620005f5565b80516200065f620002fd600062000294565b11156200066e57805190602001fd5b604051630a12f52160e11b8152600490fdfe608060405261000c61000e565b005b610016610027565b565b6001600160a01b031690565b90565b336100616100547f0000000000000000000000000000000000000000000000000000000000000000610018565b916001600160a01b031690565b036100e8577f4f1ef286000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060003516146100e0576040517fd2b576ec000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b6100166102ed565b6100f06100f5565b610156565b610024610140565b6100246100246100249290565b6100247f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6100fd565b546001600160a01b031690565b610024600061015061002461010a565b01610133565b60008091368280378136915af43d6000803e15610172573d6000f35b3d6000fd5b9093929384831161018f57841161018f578101920390565b600080fd5b6001600160a01b0381160361018f57565b9050359061001682610194565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761020357604052565b6101b2565b9061001661021560405190565b92836101e1565b67ffffffffffffffff811161020357602090601f01601f19160190565b90826000939282370152565b9092919261025a6102558261021c565b610208565b9381855260208501908284011161018f5761001692610239565b9080601f8301121561018f5781602061002493359101610245565b91909160408184031261018f576102a683826101a5565b92602082013567ffffffffffffffff811161018f576100249201610274565b610018610024610024926001600160a01b031690565b610024906102c5565b610024906102db565b61001661032361031c6103146103103660008161030a60046100fd565b91610177565b9091565b81019061028f565b91906102e4565b9061032d826103ef565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b610357836102e4565b9061036160405190565b600090a2805161037861037460006100fd565b9190565b111561038a57610387916104c7565b50565b5050610016610456565b6001600160a01b03909116815260200190565b906103b76100246103eb926102e4565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000813b6103ff610374836100fd565b1461041a57906100169161041461002461010a565b016103a7565b6100dc8261042760405190565b9182917f4c9c8ce300000000000000000000000000000000000000000000000000000000835260048301610394565b3461046461037460006100fd565b1161046b57565b6040517fb398979f000000000000000000000000000000000000000000000000000000008152600490fd5b906104a36102558361021c565b918252565b3d156104c2576104b73d610496565b903d6000602084013e565b606090565b600080610024936104d6606090565b50805190602001845af46104e86104a8565b91906104f45750610569565b8151600090610505610374836100fd565b149081610552575b50610516575090565b6100dc9061052360405190565b9182917f9996b31500000000000000000000000000000000000000000000000000000000835260048301610394565b9050610562610374833b926100fd565b143861050d565b805161057861037460006100fd565b111561058657805190602001fd5b6040517f1425ea42000000000000000000000000000000000000000000000000000000008152600490fdfea2646970667358221220782f2801dba6b92d163f770087c095f4a3bcf48f3a41dbeafc28edfa481d940f64736f6c6343000814003360806040523462000030576200001e62000018620000d3565b620000f6565b60405161066362000265823961066390f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003057565b905051906200008a826200009b565b9060208282031262000030576200009891620000ad565b62000098620008c880380380620000ea8162000073565b928339810190620000bc565b6200008a906200012f565b6200008c62000098620000989290565b620000989062000101565b6001600160a01b03909116815260200190565b6200013b600062000111565b6001600160a01b0381166001600160a01b038316146200016157506200008a9062000202565b62000187906200017060405190565b631e4fbdf760e01b8152918291600483016200011c565b0390fd5b62000098906200008c565b6200009890546200018b565b62000098906200008c906001600160a01b031682565b6200009890620001a2565b6200009890620001b8565b90620001e262000098620001fe92620001c3565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200020e600062000196565b906200021c816000620001ce565b620002536200024c7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620001c3565b91620001c3565b916200025e60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063715018a6146100625780638da5cb5b1461005d5780639623609d14610058578063ad3cb1cc146100535763f2fde38b036100725761035a565b61031f565b610246565b6100a9565b610077565b600091031261007257565b600080fd5b3461007257610087366004610067565b61008f6103aa565b604051005b0390f35b6001600160a01b031690565b90565b565b34610072576100b9366004610067565b6100946100ce6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b6001600160a01b0381165b0361007257565b905035906100a7826100e8565b6001600160a01b0381166100f3565b905035906100a782610107565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761017457604052565b610123565b906100a761018660405190565b9283610152565b67ffffffffffffffff811161017457602090601f01601f19160190565b0190565b90826000939282370152565b909291926101cf6101ca8261018d565b610179565b93818552602085019082840111610072576100a7926101ae565b9080601f83011215610072578160206100a4933591016101ba565b916060838303126100725761021982846100fa565b926102278360208301610116565b92604082013567ffffffffffffffff8111610072576100a492016101e9565b61008f610254366004610204565b91610622565b906102676101ca8361018d565b918252565b610276600561025a565b7f352e302e30000000000000000000000000000000000000000000000000000000602082015290565b6100a461026c565b6100a461029f565b6100a46102a7565b60005b8381106102ca5750506000910152565b81810151838201526020016102ba565b6102fb6103046020936101aa936102ef815190565b80835293849260200190565b958691016102b7565b601f01601f191690565b60208082526100a4929101906102da565b346100725761032f366004610067565b61009461033a6102af565b6040519182918261030e565b90602082820312610072576100a491610116565b346100725761008f61036d366004610346565b61049b565b61037a6103b2565b6100a7610398565b6100986100a46100a49290565b6100a490610382565b6100a76103a5600061038f565b610514565b6100a7610372565b60005433906001600160a01b03168190036103ca5750565b610414906103d760405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6100a7906104246103b2565b61042e600061038f565b6001600160a01b0381166001600160a01b0383161461045157506100a790610514565b6104149061045e60405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6100a790610418565b6100986100a46100a4926001600160a01b031690565b6100a4906104a4565b6100a4906104ba565b906104dc6100a4610510926104c3565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000546001600160a01b03169061052c8160006104cc565b61055f6105597f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104c3565b916104c3565b9161056960405190565b600090a3565b906100a7929161057d6103b2565b6105b1565b6001600160a01b0390911681526100a491604082019160208184039101526102da565b6040513d6000823e3d90fd5b6105ba906104c3565b349190634f1ef286813b15610072576000936105e9916105f46105dc60405190565b9788968795869460e01b90565b845260048401610582565b03925af1801561061d576106055750565b6100a79060006106158183610152565b810190610067565b6105a5565b906100a7929161056f56fea26469706673582212205d5f75a536a5fd2f2e441550c1d5a4e715b6cff79e1cc29a86c7abd4b441f65364736f6c6343000814003360806040523461001a57604051611812610020823961181290f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146100d2578063248a9ca3146100cd5780632f2ff15d146100c857806336568abe146100c3578063485cc955146100be578063508a50f4146100b95780635f03a661146100b457806391d14854146100af5780639dbbcf8e146100aa578063a217fddf146100a5578063d547741f146100a05763ee546fd803610102576103b5565b610388565b61036d565b610336565b6102e6565b6102ad565b610274565b610250565b61021d565b6101ff565b610189565b610131565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361010257565b600080fd5b90503590610114826100d7565b565b906020828203126101025761012a91610107565b90565b9052565b346101025761015e61014c610147366004610116565b6103cd565b60405191829182901515815260200190565b0390f35b806100fb565b9050359061011482610162565b906020828203126101025761012a91610168565b346101025761015e6101a461019f366004610175565b6104f0565b6040519182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166100fb565b90503590610114826101c0565b91906040838203126101025761012a906101f68185610168565b936020016101cf565b34610102576102186102123660046101dc565b90610532565b604051005b34610102576102186102303660046101dc565b906105e2565b91906040838203126101025761012a906101f681856101cf565b3461010257610218610263366004610236565b906109d3565b600091031261010257565b3461010257610284366004610269565b61015e7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5986101a4565b34610102576102bd366004610269565b61015e7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db6101a4565b346101025761015e61014c6102fc3660046101dc565b906104c0565b908160209103126101025790565b9060208282031261010257813567ffffffffffffffff81116101025761012a9201610302565b3461010257610218610349366004610310565b6110ca565b61012a61012a61012a9290565b61012a600061034e565b61012a61035b565b346101025761037d366004610269565b61015e6101a4610365565b346101025761021861039b3660046101dc565b906105d8565b906020828203126101025761012a916101cf565b34610102576102186103c83660046103a1565b610ae3565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082161490811561041d575090565b61012a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101b461012a61012a926001600160a01b031690565b61012a90610479565b61012a9061048f565b9061046b90610498565b61012a905b60ff1690565b61012a90546104ab565b61012a916104da916104d460009182610469565b016104a1565b6104b6565b61012a9081565b61012a90546104df565b600161050961012a92610501600090565b506000610469565b016104e6565b9061011491610525610520826104f0565b61053c565b9061052f91610659565b50565b906101149161050f565b610114903390610564565b6001600160a01b0390911681526040810192916101149160200152565b9061057661057282846104c0565b1590565b61057e575050565b6105b961058a60405190565b9283927fe2517d3f00000000000000000000000000000000000000000000000000000000845260048401610547565b0390fd5b90610114916105ce610520826104f0565b9061052f916106d5565b90610114916105bd565b906105ec336101b4565b6001600160a01b038216036106045761052f916106d5565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061064e61012a61065592151590565b825461062f565b9055565b61066661057283836104c0565b156106ce57600191610687836106828360006104d48782610469565b61063e565b33906106bd6106b76106b77f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b92610498565b926106c760405190565b600090a490565b5050600090565b906106e081836104c0565b156106ce576106f9600061068283826104d48782610469565b33906107296106b76106b77ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261073360405190565b600090a4600190565b61012a9060401c6104b0565b61012a905461073c565b61012a905b67ffffffffffffffff1690565b61012a9054610752565b61075761012a61012a9290565b9067ffffffffffffffff90610634565b61075761012a61012a9267ffffffffffffffff1690565b906107b261012a6106559261078b565b825461077b565b9068ff00000000000000009060401b610634565b906107dd61012a61065592151590565b82546107b9565b61012d9061076e565b60208101929161011491906107e4565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00908161083661083061057283610748565b91610764565b936000926108438461076e565b67ffffffffffffffff87161480610965575b6001966108726108648961076e565b9167ffffffffffffffff1690565b14908161093d575b155b9081610934575b50610909576108ac91836108a38661089a8a61076e565b980197886107a2565b6108fa5761096c565b6108b557505050565b6108be916107cd565b6108f57fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916108ec60405190565b918291826107ed565b0390a1565b61090487876107cd565b61096c565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b15905038610883565b905061087c61094b30610498565b3b61095c6109588861034e565b9190565b1491905061087a565b5082610855565b906109ac61052f926109858161098061035b565b610659565b507ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598610659565b507f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610659565b90610114916107fd565b61011490610a0a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59861053c565b610ace565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8054821015610a5e57610a55600191600052602060002090565b91020190600090565b610a25565b91906008610634910291610a7d6001600160a01b03841b90565b921b90565b9190610a9361012a61065593610498565b908354610a63565b9081549168010000000000000000831015610ac95782610ac391600161011495018155610a3b565b90610a82565b610a0f565b61011490610add600191610498565b90610a9b565b610114906109dd565b61011490610b197f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db61053c565b610f59565b903590601e193682900301821215610102570180359067ffffffffffffffff82116101025760200191602082023603831361010257565b90601f01601f1916810190811067ffffffffffffffff821117610ac957604052565b90610114610b8460405190565b9283610b55565b67ffffffffffffffff8111610ac95760208091020190565b90610bb5610bb083610b8b565b610b77565b918252565b61012a6101c0610b77565b60209081808080808080808080808080610bdd610bba565b9e8f60008152016000815201600081520160008152016000815201600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b61012a610bc5565b60005b828110610c3e57505050565b602090610c49610c27565b8184015201610c32565b90610114610c69610c6384610ba3565b93610b8b565b601f190160208401610c2f565b634e487b7160e01b600052601160045260246000fd5b6000198114610c9b5760010190565b610c76565b903590601e193682900301821215610102570180359067ffffffffffffffff8211610102576020019136829003831361010257565b90821015610a5e576020610cec9202810190610ca0565b9091565b90610cf9825190565b811015610a5e576020809102010190565b61012a916008021c6101b4565b9061012a9154610d0a565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b610d66610d6f602093610d7993610d5a815190565b80835293849260200190565b95869101610d22565b601f01601f191690565b0190565b90610d9d610d96610d8c845190565b8084529260200190565b9260200190565b9060005b818110610dae5750505090565b909192610dd4610dcd60019286516001600160a01b0316815260200190565b9460200190565b929101610da1565b805160ff16825261012a916101a0610e626101c08301610e0160208601516020860152565b610e1060408601516040860152565b610e1f60608601516060860152565b610e2e60808601516080860152565b60a0858101516001600160a01b031690850152610e5060c086015160c0860152565b60e085015184820360e0860152610d45565b6101008085015160ff169084015292610e82610120820151610120850152565b610e93610140820151610140850152565b610ea4610160820151610160850152565b610eb5610180820151610180850152565b0151906101a0818403910152610d7d565b9061012a91610ddc565b90610ee6610edc835190565b8083529160200190565b9081610ef86020830284019460200190565b926000915b838310610f0c57505050505090565b90919293946020610f2f610f2883856001950387528951610ec6565b9760200190565b9301930191939290610efd565b602080825261012a92910190610ed0565b6040513d6000823e3d90fd5b610f6b610f668280610b1e565b905090565b90600091610f7b6109588461034e565b146110c65781810190610f99610f94610f668484610b1e565b610c53565b93610fa38461034e565b610fb361012a610f668686610b1e565b811015610ffb5780610fdb610fd5610ff693610fcf8888610b1e565b90610cd5565b90611155565b610fe58289610cf0565b52610ff08188610cf0565b50610c8c565b610fa3565b50929150506110098161034e565b600161101661012a825490565b8210156110bf5761103361102d8361103893610a3b565b90610d17565b610498565b9063630ac52c91803b156101025761105e92849161105560405190565b94859260e01b90565b82528183816110708b60048301610f3c565b03925af19182156110ba576110899261108e5750610c8c565b611009565b6110ad90843d86116110b3575b6110a58183610b55565b810190610269565b38610ff0565b503d61109b565b610f4d565b5050509050565b5050565b61011490610aec565b156110da57565b60405162461bcd60e51b815260206004820152601660248201527f456d707479207472616e73616374696f6e2064617461000000000000000000006044820152606490fd5b9190811015610a5e570190565b6104b061012a61012a9260ff1690565b61012a9060f81c61112c565b6104b061012a61012a9290565b9061115e610c27565b506000611177826111716109588461034e565b116110d3565b6111c46111be6111b961119361118c8561034e565b868861111f565b357fff000000000000000000000000000000000000000000000000000000000000001690565b61113c565b91611148565b60ff8216036111d7575061012a91611378565b6111e16001611148565b60ff8216036111f4575061012a9161156e565b6112086112016002611148565b9160ff1690565b036112165761012a9161171b565b60405162461bcd60e51b815260206004820152601c60248201527f556e737570706f72746564207472616e73616374696f6e2074797065000000006044820152606490fd5b67ffffffffffffffff8111610ac957602090601f01601f19160190565b90826000939282370152565b90929192611294610bb08261125b565b938185526020850190828401116101025761011492611278565b9080601f830112156101025781602061012a93359101611284565b60ff81166100fb565b90503590610114826112c9565b909161012082840312610102576112f68383610168565b926113048160208501610168565b926113128260408301610168565b9261132083606084016101cf565b9261132e8160808501610168565b9260a081013567ffffffffffffffff8111610102578261134f9183016112ae565b9261012a6113608460c085016112d2565b9361136e8160e08601610168565b9361010001610168565b9061141761140861140861103361012a94611391610c27565b506114086113c26113a0610c27565b9889936113ba60006113b181611148565b60ff1690870152565b8101906112df565b94929c95979d939060408b9c93989c019d60608c019b611413608082019a60a083019961140b60c085019660e08601956114086101008201946101406101208401930152565b52565b9060ff169052565b5252565b6001600160a01b03169052565b90939293848311610102578411610102578101920390565b9092919261144c610bb082610b8b565b938185526020808601920283019281841161010257915b8383106114705750505050565b6020809161147e84866101cf565b815201920191611463565b9080601f830112156101025781602061012a9335910161143c565b919061016083820312610102576114bb8184610168565b926114c98260208301610168565b926114d78360408401610168565b926114e58160608501610168565b926114f382608083016101cf565b926115018360a08401610168565b9260c083013567ffffffffffffffff811161010257816115229185016112ae565b9260e081013567ffffffffffffffff81116101025782611543918301611489565b9261012a6115558461010085016112d2565b93611564816101208601610168565b9361014001610168565b611576610c27565b5061157f610c27565b9180600161158c81611148565b60ff16855261159a9061034e565b906115a493611424565b81016115af916114a4565b9160208c9b9a989497929599969b019a60408d01998d6060810199608082019860a083019760c084019660e08501946101a081019361010082019361012083019261014001906115fc9152565b6116039152565b60ff16905252526116119152565b61161a90610498565b6001600160a01b031690525b61162d9152565b6116349152565b61163b9152565b61012a9152565b909161018082840312610102576116598383610168565b926116678160208501610168565b926116758260408301610168565b926116838360608401610168565b926116918160808501610168565b9261169f8260a083016101cf565b926116ad8360c08401610168565b9260e083013567ffffffffffffffff811161010257816116ce9185016112ae565b9261010081013567ffffffffffffffff811161010257826116f0918301611489565b9261012a6117028461012085016112d2565b93611711816101408601610168565b9361016001610168565b90611724610c27565b5061172d610c27565b91829161173a6002611148565b60ff1683528061174a600161034e565b9061175493611424565b810161175f91611642565b6101408d015260208c019b604081019a99610160820199909861018083019891976080840197919660a0850196939560c0860195929460e08401936101a08101926101008201929161012001906117b39152565b60ff16905252526117c19152565b6117ca90610498565b6001600160a01b03169052611626915256fea2646970667358221220b8ff3cf3247a12d054de35f2950617cc72e1a0c6e90f9eebcd928df1a78d874b64736f6c63430008140033", + Bin: "0x6080604052346200002e576200001e62000018620000d1565b620000f4565b604051603f620003818239603f90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b038116036200002e57565b90505190620000888262000099565b906020828203126200002e576200009691620000ab565b62000096620030e780380380620000e88162000071565b928339810190620000ba565b620000889062000164565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b62000096906200010b565b620000969062000121565b620001536200014d620000969263ffffffff1690565b60e01b90565b6001600160e01b03191690565b0190565b6040516117f781016001600160401b038111828210176200006b576200019182916117f7620018f0843990565b03906000f080156200028d576200020d916200020760049262000201620001bc63485cc95562000137565b620001f13386620001cc60405190565b98899460208601908152016001600160a01b0391821681529116602082015260400190565b6020820181038252038562000049565b6200012c565b62000335565b620002887fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69916200023d60405190565b9182918260408082526014908201527f5472616e73616374696f6e73416e616c797a657200000000000000000000000060608201526001600160a01b03909116602082015260800190565b0390a1565b620000ff565b60005b838110620002a75750506000910152565b818101518382015260200162000296565b620002dd620002e76020936200016093620002d1815190565b80835293849260200190565b9586910162000293565b601f01601f191690565b620003276200009694929362000317606084019560008501906001600160a01b03169052565b6001600160a01b03166020830152565b6040818403910152620002b8565b90604051926115308401916001600160401b038311858410176200006b5784936200036993611530620003c08739620002f1565b03906000f080156200028d5762000096906200012c56fe6080604052600080fdfea2646970667358221220acd5780e806f3c3a965a700694c9f3fce1db6b472e7cb32e15c84b7d8243d01f64736f6c6343000814003360a060405262000019620000126200019f565b91620001ff565b6040516105e762000681823960805181603001526105e790f35b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b03811603620000ab57565b600080fd5b90505190620000888262000099565b6001600160401b0381116200006b57602090601f01601f19160190565b60005b838110620000f05750506000910152565b8181015183820152602001620000df565b909291926200011a6200011482620000bf565b62000071565b93818552602085019082840111620000ab576200008892620000dc565b9080601f83011215620000ab578151620000969260200162000101565b91606083830312620000ab576200016c8284620000b0565b926200017c8360208301620000b0565b60408201519093906001600160401b038111620000ab5762000096920162000137565b620001c26200153080380380620001b68162000071565b92833981019062000154565b909192565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b6200009690620001d3565b6200009690620001e9565b916200020c919262000288565b604051906108c882016001600160401b038111838210176200006b5782916200024b916108c862000c6885396001600160a01b03909116815260200190565b03906000f0801562000282576200026290620001f4565b608052620000886200027c6080516001600160a01b031690565b62000406565b620001c7565b906200008891620002a4565b6200009662000096620000969290565b90620002b08262000381565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b620002dc83620001f4565b90620002e760405190565b600090a2805162000301620002fd600062000294565b9190565b111562000316576200031391620005a5565b50565b50506200008862000543565b620000967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc62000294565b9062000361620000966200037d92620001f4565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6000813b62000394620002fd8362000294565b14620003b557906200008891620003ae6200009662000322565b016200034d565b620003e882620003c460405190565b634c9c8ce360e01b8152918291600483016001600160a01b03909116815260200190565b0390fd5b6001600160a01b0391821681529116602082015260400190565b6200008890620004156200049b565b817f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91620004506200044660405190565b92839283620003ec565b0390a1620004d1565b620000967fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610362000294565b62000096906200008a565b62000096905462000484565b620000966000620004af6200009662000459565b016200048f565b6200008a62000096620000969290565b6200009690620004b6565b90600091620004e083620004c6565b926001600160a01b0384166001600160a01b03831614620005105762000088929350620003ae6200009662000459565b620003e8846200051f60405190565b633173bdd160e11b8152918291600483016001600160a01b03909116815260200190565b3462000554620002fd600062000294565b116200055c57565b60405163b398979f60e01b8152600490fd5b906200057e6200011483620000bf565b918252565b3d15620005a057620005953d6200056e565b903d6000602084013e565b606090565b6000806200009693620005b6606090565b50805190602001845af4620005ca62000583565b9190620005d857506200064d565b8151600090620005ec620002fd8362000294565b14908162000632575b50620005ff575090565b620003e8906200060e60405190565b639996b31560e01b8152918291600483016001600160a01b03909116815260200190565b905062000645620002fd833b9262000294565b1438620005f5565b80516200065f620002fd600062000294565b11156200066e57805190602001fd5b604051630a12f52160e11b8152600490fdfe608060405261000c61000e565b005b610016610027565b565b6001600160a01b031690565b90565b336100616100547f0000000000000000000000000000000000000000000000000000000000000000610018565b916001600160a01b031690565b036100e8577f4f1ef286000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060003516146100e0576040517fd2b576ec000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b6100166102ed565b6100f06100f5565b610156565b610024610140565b6100246100246100249290565b6100247f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6100fd565b546001600160a01b031690565b610024600061015061002461010a565b01610133565b60008091368280378136915af43d6000803e15610172573d6000f35b3d6000fd5b9093929384831161018f57841161018f578101920390565b600080fd5b6001600160a01b0381160361018f57565b9050359061001682610194565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761020357604052565b6101b2565b9061001661021560405190565b92836101e1565b67ffffffffffffffff811161020357602090601f01601f19160190565b90826000939282370152565b9092919261025a6102558261021c565b610208565b9381855260208501908284011161018f5761001692610239565b9080601f8301121561018f5781602061002493359101610245565b91909160408184031261018f576102a683826101a5565b92602082013567ffffffffffffffff811161018f576100249201610274565b610018610024610024926001600160a01b031690565b610024906102c5565b610024906102db565b61001661032361031c6103146103103660008161030a60046100fd565b91610177565b9091565b81019061028f565b91906102e4565b9061032d826103ef565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b610357836102e4565b9061036160405190565b600090a2805161037861037460006100fd565b9190565b111561038a57610387916104c7565b50565b5050610016610456565b6001600160a01b03909116815260200190565b906103b76100246103eb926102e4565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000813b6103ff610374836100fd565b1461041a57906100169161041461002461010a565b016103a7565b6100dc8261042760405190565b9182917f4c9c8ce300000000000000000000000000000000000000000000000000000000835260048301610394565b3461046461037460006100fd565b1161046b57565b6040517fb398979f000000000000000000000000000000000000000000000000000000008152600490fd5b906104a36102558361021c565b918252565b3d156104c2576104b73d610496565b903d6000602084013e565b606090565b600080610024936104d6606090565b50805190602001845af46104e86104a8565b91906104f45750610569565b8151600090610505610374836100fd565b149081610552575b50610516575090565b6100dc9061052360405190565b9182917f9996b31500000000000000000000000000000000000000000000000000000000835260048301610394565b9050610562610374833b926100fd565b143861050d565b805161057861037460006100fd565b111561058657805190602001fd5b6040517f1425ea42000000000000000000000000000000000000000000000000000000008152600490fdfea2646970667358221220782f2801dba6b92d163f770087c095f4a3bcf48f3a41dbeafc28edfa481d940f64736f6c6343000814003360806040523462000030576200001e62000018620000d3565b620000f6565b60405161066362000265823961066390f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003057565b905051906200008a826200009b565b9060208282031262000030576200009891620000ad565b62000098620008c880380380620000ea8162000073565b928339810190620000bc565b6200008a906200012f565b6200008c62000098620000989290565b620000989062000101565b6001600160a01b03909116815260200190565b6200013b600062000111565b6001600160a01b0381166001600160a01b038316146200016157506200008a9062000202565b62000187906200017060405190565b631e4fbdf760e01b8152918291600483016200011c565b0390fd5b62000098906200008c565b6200009890546200018b565b62000098906200008c906001600160a01b031682565b6200009890620001a2565b6200009890620001b8565b90620001e262000098620001fe92620001c3565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200020e600062000196565b906200021c816000620001ce565b620002536200024c7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620001c3565b91620001c3565b916200025e60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063715018a6146100625780638da5cb5b1461005d5780639623609d14610058578063ad3cb1cc146100535763f2fde38b036100725761035a565b61031f565b610246565b6100a9565b610077565b600091031261007257565b600080fd5b3461007257610087366004610067565b61008f6103aa565b604051005b0390f35b6001600160a01b031690565b90565b565b34610072576100b9366004610067565b6100946100ce6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b6001600160a01b0381165b0361007257565b905035906100a7826100e8565b6001600160a01b0381166100f3565b905035906100a782610107565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761017457604052565b610123565b906100a761018660405190565b9283610152565b67ffffffffffffffff811161017457602090601f01601f19160190565b0190565b90826000939282370152565b909291926101cf6101ca8261018d565b610179565b93818552602085019082840111610072576100a7926101ae565b9080601f83011215610072578160206100a4933591016101ba565b916060838303126100725761021982846100fa565b926102278360208301610116565b92604082013567ffffffffffffffff8111610072576100a492016101e9565b61008f610254366004610204565b91610622565b906102676101ca8361018d565b918252565b610276600561025a565b7f352e302e30000000000000000000000000000000000000000000000000000000602082015290565b6100a461026c565b6100a461029f565b6100a46102a7565b60005b8381106102ca5750506000910152565b81810151838201526020016102ba565b6102fb6103046020936101aa936102ef815190565b80835293849260200190565b958691016102b7565b601f01601f191690565b60208082526100a4929101906102da565b346100725761032f366004610067565b61009461033a6102af565b6040519182918261030e565b90602082820312610072576100a491610116565b346100725761008f61036d366004610346565b61049b565b61037a6103b2565b6100a7610398565b6100986100a46100a49290565b6100a490610382565b6100a76103a5600061038f565b610514565b6100a7610372565b60005433906001600160a01b03168190036103ca5750565b610414906103d760405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6100a7906104246103b2565b61042e600061038f565b6001600160a01b0381166001600160a01b0383161461045157506100a790610514565b6104149061045e60405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6100a790610418565b6100986100a46100a4926001600160a01b031690565b6100a4906104a4565b6100a4906104ba565b906104dc6100a4610510926104c3565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000546001600160a01b03169061052c8160006104cc565b61055f6105597f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104c3565b916104c3565b9161056960405190565b600090a3565b906100a7929161057d6103b2565b6105b1565b6001600160a01b0390911681526100a491604082019160208184039101526102da565b6040513d6000823e3d90fd5b6105ba906104c3565b349190634f1ef286813b15610072576000936105e9916105f46105dc60405190565b9788968795869460e01b90565b845260048401610582565b03925af1801561061d576106055750565b6100a79060006106158183610152565b810190610067565b6105a5565b906100a7929161056f56fea26469706673582212205d5f75a536a5fd2f2e441550c1d5a4e715b6cff79e1cc29a86c7abd4b441f65364736f6c6343000814003360806040523461001a576040516117d761002082396117d790f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146100d2578063248a9ca3146100cd5780632f2ff15d146100c857806336568abe146100c3578063485cc955146100be578063508a50f4146100b95780635f03a661146100b457806391d14854146100af5780639dbbcf8e146100aa578063a217fddf146100a5578063d547741f146100a05763ee546fd803610102576103b5565b610388565b61036d565b610336565b6102e6565b6102ad565b610274565b610250565b61021d565b6101ff565b610189565b610131565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361010257565b600080fd5b90503590610114826100d7565b565b906020828203126101025761012a91610107565b90565b9052565b346101025761015e61014c610147366004610116565b6103cd565b60405191829182901515815260200190565b0390f35b806100fb565b9050359061011482610162565b906020828203126101025761012a91610168565b346101025761015e6101a461019f366004610175565b6104f0565b6040519182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166100fb565b90503590610114826101c0565b91906040838203126101025761012a906101f68185610168565b936020016101cf565b34610102576102186102123660046101dc565b90610532565b604051005b34610102576102186102303660046101dc565b906105e2565b91906040838203126101025761012a906101f681856101cf565b3461010257610218610263366004610236565b906109d3565b600091031261010257565b3461010257610284366004610269565b61015e7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5986101a4565b34610102576102bd366004610269565b61015e7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db6101a4565b346101025761015e61014c6102fc3660046101dc565b906104c0565b908160209103126101025790565b9060208282031261010257813567ffffffffffffffff81116101025761012a9201610302565b3461010257610218610349366004610310565b61108f565b61012a61012a61012a9290565b61012a600061034e565b61012a61035b565b346101025761037d366004610269565b61015e6101a4610365565b346101025761021861039b3660046101dc565b906105d8565b906020828203126101025761012a916101cf565b34610102576102186103c83660046103a1565b610a9c565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082161490811561041d575090565b61012a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101b461012a61012a926001600160a01b031690565b61012a90610479565b61012a9061048f565b9061046b90610498565b61012a905b60ff1690565b61012a90546104ab565b61012a916104da916104d460009182610469565b016104a1565b6104b6565b61012a9081565b61012a90546104df565b600161050961012a92610501600090565b506000610469565b016104e6565b9061011491610525610520826104f0565b61053c565b9061052f91610659565b50565b906101149161050f565b610114903390610564565b6001600160a01b0390911681526040810192916101149160200152565b9061057661057282846104c0565b1590565b61057e575050565b6105b961058a60405190565b9283927fe2517d3f00000000000000000000000000000000000000000000000000000000845260048401610547565b0390fd5b90610114916105ce610520826104f0565b9061052f916106d5565b90610114916105bd565b906105ec336101b4565b6001600160a01b038216036106045761052f916106d5565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061064e61012a61065592151590565b825461062f565b9055565b61066661057283836104c0565b156106ce57600191610687836106828360006104d48782610469565b61063e565b33906106bd6106b76106b77f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b92610498565b926106c760405190565b600090a490565b5050600090565b906106e081836104c0565b156106ce576106f9600061068283826104d48782610469565b33906107296106b76106b77ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261073360405190565b600090a4600190565b61012a9060401c6104b0565b61012a905461073c565b61012a905b67ffffffffffffffff1690565b61012a9054610752565b61075761012a61012a9290565b9067ffffffffffffffff90610634565b61075761012a61012a9267ffffffffffffffff1690565b906107b261012a6106559261078b565b825461077b565b9068ff00000000000000009060401b610634565b906107dd61012a61065592151590565b82546107b9565b61012d9061076e565b60208101929161011491906107e4565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00908161083661083061057283610748565b91610764565b936000926108438461076e565b67ffffffffffffffff87161480610965575b6001966108726108648961076e565b9167ffffffffffffffff1690565b14908161093d575b155b9081610934575b50610909576108ac91836108a38661089a8a61076e565b980197886107a2565b6108fa5761096c565b6108b557505050565b6108be916107cd565b6108f57fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916108ec60405190565b918291826107ed565b0390a1565b61090487876107cd565b61096c565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b15905038610883565b905061087c61094b30610498565b3b61095c6109588861034e565b9190565b1491905061087a565b5082610855565b906109ac61052f926109858161098061035b565b610659565b507ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598610659565b507f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610659565b90610114916107fd565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8054821015610a2c57610a23600191600052602060002090565b91020190600090565b6109f3565b91906008610634910291610a4b6001600160a01b03841b90565b921b90565b9190610a6161012a61065593610498565b908354610a31565b9081549168010000000000000000831015610a975782610a9191600161011495018155610a09565b90610a50565b6109dd565b61011490610aab600191610498565b90610a69565b61011490610ade7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db61053c565b610f1e565b903590601e193682900301821215610102570180359067ffffffffffffffff82116101025760200191602082023603831361010257565b90601f01601f1916810190811067ffffffffffffffff821117610a9757604052565b90610114610b4960405190565b9283610b1a565b67ffffffffffffffff8111610a975760208091020190565b90610b7a610b7583610b50565b610b3c565b918252565b61012a6101c0610b3c565b60209081808080808080808080808080610ba2610b7f565b9e8f60008152016000815201600081520160008152016000815201600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b61012a610b8a565b60005b828110610c0357505050565b602090610c0e610bec565b8184015201610bf7565b90610114610c2e610c2884610b68565b93610b50565b601f190160208401610bf4565b634e487b7160e01b600052601160045260246000fd5b6000198114610c605760010190565b610c3b565b903590601e193682900301821215610102570180359067ffffffffffffffff8211610102576020019136829003831361010257565b90821015610a2c576020610cb19202810190610c65565b9091565b90610cbe825190565b811015610a2c576020809102010190565b61012a916008021c6101b4565b9061012a9154610ccf565b60005b838110610cfa5750506000910152565b8181015183820152602001610cea565b610d2b610d34602093610d3e93610d1f815190565b80835293849260200190565b95869101610ce7565b601f01601f191690565b0190565b90610d62610d5b610d51845190565b8084529260200190565b9260200190565b9060005b818110610d735750505090565b909192610d99610d9260019286516001600160a01b0316815260200190565b9460200190565b929101610d66565b805160ff16825261012a916101a0610e276101c08301610dc660208601516020860152565b610dd560408601516040860152565b610de460608601516060860152565b610df360808601516080860152565b60a0858101516001600160a01b031690850152610e1560c086015160c0860152565b60e085015184820360e0860152610d0a565b6101008085015160ff169084015292610e47610120820151610120850152565b610e58610140820151610140850152565b610e69610160820151610160850152565b610e7a610180820151610180850152565b0151906101a0818403910152610d42565b9061012a91610da1565b90610eab610ea1835190565b8083529160200190565b9081610ebd6020830284019460200190565b926000915b838310610ed157505050505090565b90919293946020610ef4610eed83856001950387528951610e8b565b9760200190565b9301930191939290610ec2565b602080825261012a92910190610e95565b6040513d6000823e3d90fd5b610f30610f2b8280610ae3565b905090565b90600091610f406109588461034e565b1461108b5781810190610f5e610f59610f2b8484610ae3565b610c18565b93610f688461034e565b610f7861012a610f2b8686610ae3565b811015610fc05780610fa0610f9a610fbb93610f948888610ae3565b90610c9a565b9061111a565b610faa8289610cb5565b52610fb58188610cb5565b50610c51565b610f68565b5092915050610fce8161034e565b6001610fdb61012a825490565b82101561108457610ff8610ff283610ffd93610a09565b90610cdc565b610498565b9063630ac52c91803b156101025761102392849161101a60405190565b94859260e01b90565b82528183816110358b60048301610f01565b03925af191821561107f5761104e926110535750610c51565b610fce565b61107290843d8611611078575b61106a8183610b1a565b810190610269565b38610fb5565b503d611060565b610f12565b5050509050565b5050565b61011490610ab1565b1561109f57565b60405162461bcd60e51b815260206004820152601660248201527f456d707479207472616e73616374696f6e2064617461000000000000000000006044820152606490fd5b9190811015610a2c570190565b6104b061012a61012a9260ff1690565b61012a9060f81c6110f1565b6104b061012a61012a9290565b90611123610bec565b50600061113c826111366109588461034e565b11611098565b61118961118361117e6111586111518561034e565b86886110e4565b357fff000000000000000000000000000000000000000000000000000000000000001690565b611101565b9161110d565b60ff82160361119c575061012a9161133d565b6111a6600161110d565b60ff8216036111b9575061012a91611533565b6111cd6111c6600261110d565b9160ff1690565b036111db5761012a916116e0565b60405162461bcd60e51b815260206004820152601c60248201527f556e737570706f72746564207472616e73616374696f6e2074797065000000006044820152606490fd5b67ffffffffffffffff8111610a9757602090601f01601f19160190565b90826000939282370152565b90929192611259610b7582611220565b93818552602085019082840111610102576101149261123d565b9080601f830112156101025781602061012a93359101611249565b60ff81166100fb565b905035906101148261128e565b909161012082840312610102576112bb8383610168565b926112c98160208501610168565b926112d78260408301610168565b926112e583606084016101cf565b926112f38160808501610168565b9260a081013567ffffffffffffffff81116101025782611314918301611273565b9261012a6113258460c08501611297565b936113338160e08601610168565b9361010001610168565b906113dc6113cd6113cd610ff861012a94611356610bec565b506113cd611387611365610bec565b98899361137f60006113768161110d565b60ff1690870152565b8101906112a4565b94929c95979d939060408b9c93989c019d60608c019b6113d8608082019a60a08301996113d060c085019660e08601956113cd6101008201946101406101208401930152565b52565b9060ff169052565b5252565b6001600160a01b03169052565b90939293848311610102578411610102578101920390565b90929192611411610b7582610b50565b938185526020808601920283019281841161010257915b8383106114355750505050565b6020809161144384866101cf565b815201920191611428565b9080601f830112156101025781602061012a93359101611401565b919061016083820312610102576114808184610168565b9261148e8260208301610168565b9261149c8360408401610168565b926114aa8160608501610168565b926114b882608083016101cf565b926114c68360a08401610168565b9260c083013567ffffffffffffffff811161010257816114e7918501611273565b9260e081013567ffffffffffffffff8111610102578261150891830161144e565b9261012a61151a846101008501611297565b93611529816101208601610168565b9361014001610168565b61153b610bec565b50611544610bec565b918060016115518161110d565b60ff16855261155f9061034e565b90611569936113e9565b810161157491611469565b9160208c9b9a989497929599969b019a60408d01998d6060810199608082019860a083019760c084019660e08501946101a081019361010082019361012083019261014001906115c19152565b6115c89152565b60ff16905252526115d69152565b6115df90610498565b6001600160a01b031690525b6115f29152565b6115f99152565b6116009152565b61012a9152565b9091610180828403126101025761161e8383610168565b9261162c8160208501610168565b9261163a8260408301610168565b926116488360608401610168565b926116568160808501610168565b926116648260a083016101cf565b926116728360c08401610168565b9260e083013567ffffffffffffffff81116101025781611693918501611273565b9261010081013567ffffffffffffffff811161010257826116b591830161144e565b9261012a6116c7846101208501611297565b936116d6816101408601610168565b9361016001610168565b906116e9610bec565b506116f2610bec565b9182916116ff600261110d565b60ff1683528061170f600161034e565b90611719936113e9565b810161172491611607565b6101408d015260208c019b604081019a99610160820199909861018083019891976080840197919660a0850196939560c0860195929460e08401936101a08101926101008201929161012001906117789152565b60ff16905252526117869152565b61178f90610498565b6001600160a01b031690526115eb915256fea264697066735822122099174bb56ff39995f0954e5f91decdef97f1bafdd9c244081520abf688b7efe764736f6c63430008140033", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go b/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go index f1693d866e..bd3ba4f1b6 100644 --- a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go +++ b/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go @@ -37,7 +37,7 @@ type TransactionsAnalyzerBlockTransactions struct { // TransactionsAnalyzerMetaData contains all meta data concerning the TransactionsAnalyzer contract. var TransactionsAnalyzerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes[]\",\"name\":\"transactions\",\"type\":\"bytes[]\"}],\"internalType\":\"structTransactionsAnalyzer.BlockTransactions\",\"name\":\"_block\",\"type\":\"tuple\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60806040523461001a57604051611812610020823961181290f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146100d2578063248a9ca3146100cd5780632f2ff15d146100c857806336568abe146100c3578063485cc955146100be578063508a50f4146100b95780635f03a661146100b457806391d14854146100af5780639dbbcf8e146100aa578063a217fddf146100a5578063d547741f146100a05763ee546fd803610102576103b5565b610388565b61036d565b610336565b6102e6565b6102ad565b610274565b610250565b61021d565b6101ff565b610189565b610131565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361010257565b600080fd5b90503590610114826100d7565b565b906020828203126101025761012a91610107565b90565b9052565b346101025761015e61014c610147366004610116565b6103cd565b60405191829182901515815260200190565b0390f35b806100fb565b9050359061011482610162565b906020828203126101025761012a91610168565b346101025761015e6101a461019f366004610175565b6104f0565b6040519182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166100fb565b90503590610114826101c0565b91906040838203126101025761012a906101f68185610168565b936020016101cf565b34610102576102186102123660046101dc565b90610532565b604051005b34610102576102186102303660046101dc565b906105e2565b91906040838203126101025761012a906101f681856101cf565b3461010257610218610263366004610236565b906109d3565b600091031261010257565b3461010257610284366004610269565b61015e7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5986101a4565b34610102576102bd366004610269565b61015e7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db6101a4565b346101025761015e61014c6102fc3660046101dc565b906104c0565b908160209103126101025790565b9060208282031261010257813567ffffffffffffffff81116101025761012a9201610302565b3461010257610218610349366004610310565b6110ca565b61012a61012a61012a9290565b61012a600061034e565b61012a61035b565b346101025761037d366004610269565b61015e6101a4610365565b346101025761021861039b3660046101dc565b906105d8565b906020828203126101025761012a916101cf565b34610102576102186103c83660046103a1565b610ae3565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082161490811561041d575090565b61012a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101b461012a61012a926001600160a01b031690565b61012a90610479565b61012a9061048f565b9061046b90610498565b61012a905b60ff1690565b61012a90546104ab565b61012a916104da916104d460009182610469565b016104a1565b6104b6565b61012a9081565b61012a90546104df565b600161050961012a92610501600090565b506000610469565b016104e6565b9061011491610525610520826104f0565b61053c565b9061052f91610659565b50565b906101149161050f565b610114903390610564565b6001600160a01b0390911681526040810192916101149160200152565b9061057661057282846104c0565b1590565b61057e575050565b6105b961058a60405190565b9283927fe2517d3f00000000000000000000000000000000000000000000000000000000845260048401610547565b0390fd5b90610114916105ce610520826104f0565b9061052f916106d5565b90610114916105bd565b906105ec336101b4565b6001600160a01b038216036106045761052f916106d5565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061064e61012a61065592151590565b825461062f565b9055565b61066661057283836104c0565b156106ce57600191610687836106828360006104d48782610469565b61063e565b33906106bd6106b76106b77f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b92610498565b926106c760405190565b600090a490565b5050600090565b906106e081836104c0565b156106ce576106f9600061068283826104d48782610469565b33906107296106b76106b77ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261073360405190565b600090a4600190565b61012a9060401c6104b0565b61012a905461073c565b61012a905b67ffffffffffffffff1690565b61012a9054610752565b61075761012a61012a9290565b9067ffffffffffffffff90610634565b61075761012a61012a9267ffffffffffffffff1690565b906107b261012a6106559261078b565b825461077b565b9068ff00000000000000009060401b610634565b906107dd61012a61065592151590565b82546107b9565b61012d9061076e565b60208101929161011491906107e4565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00908161083661083061057283610748565b91610764565b936000926108438461076e565b67ffffffffffffffff87161480610965575b6001966108726108648961076e565b9167ffffffffffffffff1690565b14908161093d575b155b9081610934575b50610909576108ac91836108a38661089a8a61076e565b980197886107a2565b6108fa5761096c565b6108b557505050565b6108be916107cd565b6108f57fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916108ec60405190565b918291826107ed565b0390a1565b61090487876107cd565b61096c565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b15905038610883565b905061087c61094b30610498565b3b61095c6109588861034e565b9190565b1491905061087a565b5082610855565b906109ac61052f926109858161098061035b565b610659565b507ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598610659565b507f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610659565b90610114916107fd565b61011490610a0a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59861053c565b610ace565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8054821015610a5e57610a55600191600052602060002090565b91020190600090565b610a25565b91906008610634910291610a7d6001600160a01b03841b90565b921b90565b9190610a9361012a61065593610498565b908354610a63565b9081549168010000000000000000831015610ac95782610ac391600161011495018155610a3b565b90610a82565b610a0f565b61011490610add600191610498565b90610a9b565b610114906109dd565b61011490610b197f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db61053c565b610f59565b903590601e193682900301821215610102570180359067ffffffffffffffff82116101025760200191602082023603831361010257565b90601f01601f1916810190811067ffffffffffffffff821117610ac957604052565b90610114610b8460405190565b9283610b55565b67ffffffffffffffff8111610ac95760208091020190565b90610bb5610bb083610b8b565b610b77565b918252565b61012a6101c0610b77565b60209081808080808080808080808080610bdd610bba565b9e8f60008152016000815201600081520160008152016000815201600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b61012a610bc5565b60005b828110610c3e57505050565b602090610c49610c27565b8184015201610c32565b90610114610c69610c6384610ba3565b93610b8b565b601f190160208401610c2f565b634e487b7160e01b600052601160045260246000fd5b6000198114610c9b5760010190565b610c76565b903590601e193682900301821215610102570180359067ffffffffffffffff8211610102576020019136829003831361010257565b90821015610a5e576020610cec9202810190610ca0565b9091565b90610cf9825190565b811015610a5e576020809102010190565b61012a916008021c6101b4565b9061012a9154610d0a565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b610d66610d6f602093610d7993610d5a815190565b80835293849260200190565b95869101610d22565b601f01601f191690565b0190565b90610d9d610d96610d8c845190565b8084529260200190565b9260200190565b9060005b818110610dae5750505090565b909192610dd4610dcd60019286516001600160a01b0316815260200190565b9460200190565b929101610da1565b805160ff16825261012a916101a0610e626101c08301610e0160208601516020860152565b610e1060408601516040860152565b610e1f60608601516060860152565b610e2e60808601516080860152565b60a0858101516001600160a01b031690850152610e5060c086015160c0860152565b60e085015184820360e0860152610d45565b6101008085015160ff169084015292610e82610120820151610120850152565b610e93610140820151610140850152565b610ea4610160820151610160850152565b610eb5610180820151610180850152565b0151906101a0818403910152610d7d565b9061012a91610ddc565b90610ee6610edc835190565b8083529160200190565b9081610ef86020830284019460200190565b926000915b838310610f0c57505050505090565b90919293946020610f2f610f2883856001950387528951610ec6565b9760200190565b9301930191939290610efd565b602080825261012a92910190610ed0565b6040513d6000823e3d90fd5b610f6b610f668280610b1e565b905090565b90600091610f7b6109588461034e565b146110c65781810190610f99610f94610f668484610b1e565b610c53565b93610fa38461034e565b610fb361012a610f668686610b1e565b811015610ffb5780610fdb610fd5610ff693610fcf8888610b1e565b90610cd5565b90611155565b610fe58289610cf0565b52610ff08188610cf0565b50610c8c565b610fa3565b50929150506110098161034e565b600161101661012a825490565b8210156110bf5761103361102d8361103893610a3b565b90610d17565b610498565b9063630ac52c91803b156101025761105e92849161105560405190565b94859260e01b90565b82528183816110708b60048301610f3c565b03925af19182156110ba576110899261108e5750610c8c565b611009565b6110ad90843d86116110b3575b6110a58183610b55565b810190610269565b38610ff0565b503d61109b565b610f4d565b5050509050565b5050565b61011490610aec565b156110da57565b60405162461bcd60e51b815260206004820152601660248201527f456d707479207472616e73616374696f6e2064617461000000000000000000006044820152606490fd5b9190811015610a5e570190565b6104b061012a61012a9260ff1690565b61012a9060f81c61112c565b6104b061012a61012a9290565b9061115e610c27565b506000611177826111716109588461034e565b116110d3565b6111c46111be6111b961119361118c8561034e565b868861111f565b357fff000000000000000000000000000000000000000000000000000000000000001690565b61113c565b91611148565b60ff8216036111d7575061012a91611378565b6111e16001611148565b60ff8216036111f4575061012a9161156e565b6112086112016002611148565b9160ff1690565b036112165761012a9161171b565b60405162461bcd60e51b815260206004820152601c60248201527f556e737570706f72746564207472616e73616374696f6e2074797065000000006044820152606490fd5b67ffffffffffffffff8111610ac957602090601f01601f19160190565b90826000939282370152565b90929192611294610bb08261125b565b938185526020850190828401116101025761011492611278565b9080601f830112156101025781602061012a93359101611284565b60ff81166100fb565b90503590610114826112c9565b909161012082840312610102576112f68383610168565b926113048160208501610168565b926113128260408301610168565b9261132083606084016101cf565b9261132e8160808501610168565b9260a081013567ffffffffffffffff8111610102578261134f9183016112ae565b9261012a6113608460c085016112d2565b9361136e8160e08601610168565b9361010001610168565b9061141761140861140861103361012a94611391610c27565b506114086113c26113a0610c27565b9889936113ba60006113b181611148565b60ff1690870152565b8101906112df565b94929c95979d939060408b9c93989c019d60608c019b611413608082019a60a083019961140b60c085019660e08601956114086101008201946101406101208401930152565b52565b9060ff169052565b5252565b6001600160a01b03169052565b90939293848311610102578411610102578101920390565b9092919261144c610bb082610b8b565b938185526020808601920283019281841161010257915b8383106114705750505050565b6020809161147e84866101cf565b815201920191611463565b9080601f830112156101025781602061012a9335910161143c565b919061016083820312610102576114bb8184610168565b926114c98260208301610168565b926114d78360408401610168565b926114e58160608501610168565b926114f382608083016101cf565b926115018360a08401610168565b9260c083013567ffffffffffffffff811161010257816115229185016112ae565b9260e081013567ffffffffffffffff81116101025782611543918301611489565b9261012a6115558461010085016112d2565b93611564816101208601610168565b9361014001610168565b611576610c27565b5061157f610c27565b9180600161158c81611148565b60ff16855261159a9061034e565b906115a493611424565b81016115af916114a4565b9160208c9b9a989497929599969b019a60408d01998d6060810199608082019860a083019760c084019660e08501946101a081019361010082019361012083019261014001906115fc9152565b6116039152565b60ff16905252526116119152565b61161a90610498565b6001600160a01b031690525b61162d9152565b6116349152565b61163b9152565b61012a9152565b909161018082840312610102576116598383610168565b926116678160208501610168565b926116758260408301610168565b926116838360608401610168565b926116918160808501610168565b9261169f8260a083016101cf565b926116ad8360c08401610168565b9260e083013567ffffffffffffffff811161010257816116ce9185016112ae565b9261010081013567ffffffffffffffff811161010257826116f0918301611489565b9261012a6117028461012085016112d2565b93611711816101408601610168565b9361016001610168565b90611724610c27565b5061172d610c27565b91829161173a6002611148565b60ff1683528061174a600161034e565b9061175493611424565b810161175f91611642565b6101408d015260208c019b604081019a99610160820199909861018083019891976080840197919660a0850196939560c0860195929460e08401936101a08101926101008201929161012001906117b39152565b60ff16905252526117c19152565b6117ca90610498565b6001600160a01b03169052611626915256fea2646970667358221220b8ff3cf3247a12d054de35f2950617cc72e1a0c6e90f9eebcd928df1a78d874b64736f6c63430008140033", + Bin: "0x60806040523461001a576040516117d761002082396117d790f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146100d2578063248a9ca3146100cd5780632f2ff15d146100c857806336568abe146100c3578063485cc955146100be578063508a50f4146100b95780635f03a661146100b457806391d14854146100af5780639dbbcf8e146100aa578063a217fddf146100a5578063d547741f146100a05763ee546fd803610102576103b5565b610388565b61036d565b610336565b6102e6565b6102ad565b610274565b610250565b61021d565b6101ff565b610189565b610131565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361010257565b600080fd5b90503590610114826100d7565b565b906020828203126101025761012a91610107565b90565b9052565b346101025761015e61014c610147366004610116565b6103cd565b60405191829182901515815260200190565b0390f35b806100fb565b9050359061011482610162565b906020828203126101025761012a91610168565b346101025761015e6101a461019f366004610175565b6104f0565b6040519182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166100fb565b90503590610114826101c0565b91906040838203126101025761012a906101f68185610168565b936020016101cf565b34610102576102186102123660046101dc565b90610532565b604051005b34610102576102186102303660046101dc565b906105e2565b91906040838203126101025761012a906101f681856101cf565b3461010257610218610263366004610236565b906109d3565b600091031261010257565b3461010257610284366004610269565b61015e7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5986101a4565b34610102576102bd366004610269565b61015e7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db6101a4565b346101025761015e61014c6102fc3660046101dc565b906104c0565b908160209103126101025790565b9060208282031261010257813567ffffffffffffffff81116101025761012a9201610302565b3461010257610218610349366004610310565b61108f565b61012a61012a61012a9290565b61012a600061034e565b61012a61035b565b346101025761037d366004610269565b61015e6101a4610365565b346101025761021861039b3660046101dc565b906105d8565b906020828203126101025761012a916101cf565b34610102576102186103c83660046103a1565b610a9c565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082161490811561041d575090565b61012a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101b461012a61012a926001600160a01b031690565b61012a90610479565b61012a9061048f565b9061046b90610498565b61012a905b60ff1690565b61012a90546104ab565b61012a916104da916104d460009182610469565b016104a1565b6104b6565b61012a9081565b61012a90546104df565b600161050961012a92610501600090565b506000610469565b016104e6565b9061011491610525610520826104f0565b61053c565b9061052f91610659565b50565b906101149161050f565b610114903390610564565b6001600160a01b0390911681526040810192916101149160200152565b9061057661057282846104c0565b1590565b61057e575050565b6105b961058a60405190565b9283927fe2517d3f00000000000000000000000000000000000000000000000000000000845260048401610547565b0390fd5b90610114916105ce610520826104f0565b9061052f916106d5565b90610114916105bd565b906105ec336101b4565b6001600160a01b038216036106045761052f916106d5565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061064e61012a61065592151590565b825461062f565b9055565b61066661057283836104c0565b156106ce57600191610687836106828360006104d48782610469565b61063e565b33906106bd6106b76106b77f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b92610498565b926106c760405190565b600090a490565b5050600090565b906106e081836104c0565b156106ce576106f9600061068283826104d48782610469565b33906107296106b76106b77ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261073360405190565b600090a4600190565b61012a9060401c6104b0565b61012a905461073c565b61012a905b67ffffffffffffffff1690565b61012a9054610752565b61075761012a61012a9290565b9067ffffffffffffffff90610634565b61075761012a61012a9267ffffffffffffffff1690565b906107b261012a6106559261078b565b825461077b565b9068ff00000000000000009060401b610634565b906107dd61012a61065592151590565b82546107b9565b61012d9061076e565b60208101929161011491906107e4565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00908161083661083061057283610748565b91610764565b936000926108438461076e565b67ffffffffffffffff87161480610965575b6001966108726108648961076e565b9167ffffffffffffffff1690565b14908161093d575b155b9081610934575b50610909576108ac91836108a38661089a8a61076e565b980197886107a2565b6108fa5761096c565b6108b557505050565b6108be916107cd565b6108f57fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916108ec60405190565b918291826107ed565b0390a1565b61090487876107cd565b61096c565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b15905038610883565b905061087c61094b30610498565b3b61095c6109588861034e565b9190565b1491905061087a565b5082610855565b906109ac61052f926109858161098061035b565b610659565b507ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598610659565b507f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610659565b90610114916107fd565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8054821015610a2c57610a23600191600052602060002090565b91020190600090565b6109f3565b91906008610634910291610a4b6001600160a01b03841b90565b921b90565b9190610a6161012a61065593610498565b908354610a31565b9081549168010000000000000000831015610a975782610a9191600161011495018155610a09565b90610a50565b6109dd565b61011490610aab600191610498565b90610a69565b61011490610ade7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db61053c565b610f1e565b903590601e193682900301821215610102570180359067ffffffffffffffff82116101025760200191602082023603831361010257565b90601f01601f1916810190811067ffffffffffffffff821117610a9757604052565b90610114610b4960405190565b9283610b1a565b67ffffffffffffffff8111610a975760208091020190565b90610b7a610b7583610b50565b610b3c565b918252565b61012a6101c0610b3c565b60209081808080808080808080808080610ba2610b7f565b9e8f60008152016000815201600081520160008152016000815201600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b61012a610b8a565b60005b828110610c0357505050565b602090610c0e610bec565b8184015201610bf7565b90610114610c2e610c2884610b68565b93610b50565b601f190160208401610bf4565b634e487b7160e01b600052601160045260246000fd5b6000198114610c605760010190565b610c3b565b903590601e193682900301821215610102570180359067ffffffffffffffff8211610102576020019136829003831361010257565b90821015610a2c576020610cb19202810190610c65565b9091565b90610cbe825190565b811015610a2c576020809102010190565b61012a916008021c6101b4565b9061012a9154610ccf565b60005b838110610cfa5750506000910152565b8181015183820152602001610cea565b610d2b610d34602093610d3e93610d1f815190565b80835293849260200190565b95869101610ce7565b601f01601f191690565b0190565b90610d62610d5b610d51845190565b8084529260200190565b9260200190565b9060005b818110610d735750505090565b909192610d99610d9260019286516001600160a01b0316815260200190565b9460200190565b929101610d66565b805160ff16825261012a916101a0610e276101c08301610dc660208601516020860152565b610dd560408601516040860152565b610de460608601516060860152565b610df360808601516080860152565b60a0858101516001600160a01b031690850152610e1560c086015160c0860152565b60e085015184820360e0860152610d0a565b6101008085015160ff169084015292610e47610120820151610120850152565b610e58610140820151610140850152565b610e69610160820151610160850152565b610e7a610180820151610180850152565b0151906101a0818403910152610d42565b9061012a91610da1565b90610eab610ea1835190565b8083529160200190565b9081610ebd6020830284019460200190565b926000915b838310610ed157505050505090565b90919293946020610ef4610eed83856001950387528951610e8b565b9760200190565b9301930191939290610ec2565b602080825261012a92910190610e95565b6040513d6000823e3d90fd5b610f30610f2b8280610ae3565b905090565b90600091610f406109588461034e565b1461108b5781810190610f5e610f59610f2b8484610ae3565b610c18565b93610f688461034e565b610f7861012a610f2b8686610ae3565b811015610fc05780610fa0610f9a610fbb93610f948888610ae3565b90610c9a565b9061111a565b610faa8289610cb5565b52610fb58188610cb5565b50610c51565b610f68565b5092915050610fce8161034e565b6001610fdb61012a825490565b82101561108457610ff8610ff283610ffd93610a09565b90610cdc565b610498565b9063630ac52c91803b156101025761102392849161101a60405190565b94859260e01b90565b82528183816110358b60048301610f01565b03925af191821561107f5761104e926110535750610c51565b610fce565b61107290843d8611611078575b61106a8183610b1a565b810190610269565b38610fb5565b503d611060565b610f12565b5050509050565b5050565b61011490610ab1565b1561109f57565b60405162461bcd60e51b815260206004820152601660248201527f456d707479207472616e73616374696f6e2064617461000000000000000000006044820152606490fd5b9190811015610a2c570190565b6104b061012a61012a9260ff1690565b61012a9060f81c6110f1565b6104b061012a61012a9290565b90611123610bec565b50600061113c826111366109588461034e565b11611098565b61118961118361117e6111586111518561034e565b86886110e4565b357fff000000000000000000000000000000000000000000000000000000000000001690565b611101565b9161110d565b60ff82160361119c575061012a9161133d565b6111a6600161110d565b60ff8216036111b9575061012a91611533565b6111cd6111c6600261110d565b9160ff1690565b036111db5761012a916116e0565b60405162461bcd60e51b815260206004820152601c60248201527f556e737570706f72746564207472616e73616374696f6e2074797065000000006044820152606490fd5b67ffffffffffffffff8111610a9757602090601f01601f19160190565b90826000939282370152565b90929192611259610b7582611220565b93818552602085019082840111610102576101149261123d565b9080601f830112156101025781602061012a93359101611249565b60ff81166100fb565b905035906101148261128e565b909161012082840312610102576112bb8383610168565b926112c98160208501610168565b926112d78260408301610168565b926112e583606084016101cf565b926112f38160808501610168565b9260a081013567ffffffffffffffff81116101025782611314918301611273565b9261012a6113258460c08501611297565b936113338160e08601610168565b9361010001610168565b906113dc6113cd6113cd610ff861012a94611356610bec565b506113cd611387611365610bec565b98899361137f60006113768161110d565b60ff1690870152565b8101906112a4565b94929c95979d939060408b9c93989c019d60608c019b6113d8608082019a60a08301996113d060c085019660e08601956113cd6101008201946101406101208401930152565b52565b9060ff169052565b5252565b6001600160a01b03169052565b90939293848311610102578411610102578101920390565b90929192611411610b7582610b50565b938185526020808601920283019281841161010257915b8383106114355750505050565b6020809161144384866101cf565b815201920191611428565b9080601f830112156101025781602061012a93359101611401565b919061016083820312610102576114808184610168565b9261148e8260208301610168565b9261149c8360408401610168565b926114aa8160608501610168565b926114b882608083016101cf565b926114c68360a08401610168565b9260c083013567ffffffffffffffff811161010257816114e7918501611273565b9260e081013567ffffffffffffffff8111610102578261150891830161144e565b9261012a61151a846101008501611297565b93611529816101208601610168565b9361014001610168565b61153b610bec565b50611544610bec565b918060016115518161110d565b60ff16855261155f9061034e565b90611569936113e9565b810161157491611469565b9160208c9b9a989497929599969b019a60408d01998d6060810199608082019860a083019760c084019660e08501946101a081019361010082019361012083019261014001906115c19152565b6115c89152565b60ff16905252526115d69152565b6115df90610498565b6001600160a01b031690525b6115f29152565b6115f99152565b6116009152565b61012a9152565b9091610180828403126101025761161e8383610168565b9261162c8160208501610168565b9261163a8260408301610168565b926116488360608401610168565b926116568160808501610168565b926116648260a083016101cf565b926116728360c08401610168565b9260e083013567ffffffffffffffff81116101025781611693918501611273565b9261010081013567ffffffffffffffff811161010257826116b591830161144e565b9261012a6116c7846101208501611297565b936116d6816101408601610168565b9361016001610168565b906116e9610bec565b506116f2610bec565b9182916116ff600261110d565b60ff1683528061170f600161034e565b90611719936113e9565b810161172491611607565b6101408d015260208c019b604081019a99610160820199909861018083019891976080840197919660a0850196939560c0860195929460e08401936101a08101926101008201929161012001906117789152565b60ff16905252526117869152565b61178f90610498565b6001600160a01b031690526115eb915256fea264697066735822122099174bb56ff39995f0954e5f91decdef97f1bafdd9c244081520abf688b7efe764736f6c63430008140033", } // TransactionsAnalyzerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ZenBase/ZenBase.go b/contracts/generated/ZenBase/ZenBase.go index 01e11fb022..42d0c6d1d5 100644 --- a/contracts/generated/ZenBase/ZenBase.go +++ b/contracts/generated/ZenBase/ZenBase.go @@ -29,8 +29,8 @@ var ( _ = abi.ConvertType ) -// TransactionDecoderTransaction is an auto generated low-level Go binding around an user-defined struct. -type TransactionDecoderTransaction struct { +// StructsTransaction is an auto generated low-level Go binding around an user-defined struct. +type StructsTransaction struct { TxType uint8 ChainId *big.Int Nonce *big.Int @@ -49,8 +49,8 @@ type TransactionDecoderTransaction struct { // ZenBaseMetaData contains all meta data concerning the ZenBase contract. var ZenBaseMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionsAnalyzer\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"accessList\",\"type\":\"address[]\"}],\"internalType\":\"structTransactionDecoder.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523462000031576200001f62000018620001b2565b916200023b565b6040516112256200057e823961122590f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003157565b905051906200008b826200009c565b6001600160401b0381116200006e57602090601f01601f19160190565b60005b838110620000ee5750506000910152565b8181015183820152602001620000dd565b90929192620001186200011282620000bd565b62000074565b9381855260208501908284011162000031576200008b92620000da565b9080601f83011215620000315781516200009992602001620000ff565b9160608383031262000031576200016a8284620000ae565b60208401519093906001600160401b0381116200003157836200018f91830162000135565b60408201519093906001600160401b038111620000315762000099920162000135565b620001d5620017a380380380620001c98162000074565b92833981019062000152565b909192565b906001600160a01b03905b9181191691161790565b62000099906200008d906001600160a01b031682565b6200009990620001ef565b620000999062000205565b906200022f62000099620002379262000210565b8254620001da565b9055565b906200008b926200024d913362000255565b60066200021b565b906200008b92916200027d565b6200008d62000099620000999290565b620000999062000262565b916200028991620004ea565b62000295600062000272565b6001600160a01b0381166001600160a01b03831614620002bb57506200008b906200051b565b620002ee90620002ca60405190565b631e4fbdf760e01b8152918291600483016001600160a01b03909116815260200190565b0390fd5b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156200032b575b60208310146200032557565b620002f2565b91607f169162000319565b9160001960089290920291821b911b620001e5565b6200009962000099620000999290565b9190620003706200009962000237936200034b565b90835462000336565b6200008b916000916200035b565b81811062000393575050565b80620003a3600060019362000379565b0162000387565b9190601f8111620003ba57505050565b620003ce6200008b93600052602060002090565b906020601f840181900483019310620003f2575b6020601f90910104019062000387565b9091508190620003e2565b9062000407815190565b906001600160401b0382116200006e576200042f8262000428855462000308565b85620003aa565b602090601f83116001146200046e576200023792916000918362000462575b5050600019600883021c1916906002021790565b0151905038806200044e565b601f198316916200048485600052602060002090565b9260005b818110620004c557509160029391856001969410620004ab575b50505002019055565b01516000196008601f8516021c19169055388080620004a2565b9193602060018192878701518155019501920162000488565b906200008b91620003fd565b90620004fc6200008b926003620004de565b6004620004de565b62000099906200008d565b62000099905462000504565b6200052760056200050f565b90620005358160056200021b565b6200056c620005657f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000210565b9162000210565b916200057760405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806306fdde03146100f2578063095ea7b3146100ed57806318160ddd146100e857806323b872dd146100e3578063313ce567146100de57806340c10f19146100d9578063630ac52c146100d457806370a08231146100cf578063715018a6146100ca5780638da5cb5b146100c557806395d89b41146100c0578063a9059cbb146100bb578063dd62ed3e146100b65763f2fde38b0361010257610466565b61044a565b61040b565b6103f0565b6103b1565b610399565b61037e565b610351565b6102d9565b6102aa565b61028e565b610232565b610204565b610176565b600091031261010257565b600080fd5b60005b83811061011a5750506000910152565b818101518382015260200161010a565b61014b61015460209361015e9361013f815190565b80835293849260200190565b95869101610107565b601f01601f191690565b0190565b60208082526101739291019061012a565b90565b34610102576101863660046100f7565b61019d6101916107aa565b60405191829182610162565b0390f35b6001600160a01b031690565b6001600160a01b0381165b0361010257565b905035906101cc826101ad565b565b806101b8565b905035906101cc826101ce565b919060408382031261010257610173906101fb81856101bf565b936020016101d4565b346101025761019d61022061021a3660046101e1565b9061085f565b60405191829182901515815260200190565b34610102576102423660046100f7565b61019d61024d6107ec565b6040515b9182918290815260200190565b90916060828403126101025761017361027784846101bf565b9361028581602086016101bf565b936040016101d4565b346101025761019d6102206102a436600461025e565b9161086a565b34610102576102ba3660046100f7565b61019d6102c56107d1565b6040519182918260ff909116815260200190565b34610102576102f26102ec3660046101e1565b906111e5565b604051005b909182601f830112156101025781359167ffffffffffffffff831161010257602001926020830284011161010257565b9060208282031261010257813567ffffffffffffffff81116101025761034d92016102f7565b9091565b34610102576102f2610364366004610327565b90611187565b9060208282031261010257610173916101bf565b346101025761019d61024d61039436600461036a565b61080e565b34610102576103a93660046100f7565b6102f26104b6565b34610102576103c13660046100f7565b61019d6103d66005546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b34610102576104003660046100f7565b61019d6101916107b4565b346101025761019d6102206104213660046101e1565b9061082a565b9190604083820312610102576101739061044181856101bf565b936020016101bf565b346101025761019d61024d610460366004610427565b9061083f565b34610102576102f261047936600461036a565b6105b7565b6104866104be565b6101cc6104a4565b6101a16101736101739290565b6101739061048e565b6101cc6104b1600061049b565b610618565b6101cc61047e565b6005546001600160a01b031633906104de825b916001600160a01b031690565b036104e65750565b610530906104f360405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6101cc906105406104be565b61054a600061049b565b6001600160a01b0381166001600160a01b0383161461056d57506101cc90610618565b6105309061057a60405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6101cc90610534565b906001600160a01b03905b9181191691161790565b6101a1610173610173926001600160a01b031690565b610173906105d5565b610173906105eb565b9061060d610173610614926105f4565b82546105c0565b9055565b6005546001600160a01b0316906106308160056105fd565b61066361065d7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936105f4565b916105f4565b9161066d60405190565b80805b0390a3565b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156106ab575b60208310146106a657565b610675565b91607f169161069b565b805460009392916106d26106c88361068b565b8085529360200190565b916001811690811561072457506001146106eb57505050565b6106fe9192939450600052602060002090565b916000925b8184106107105750500190565b805484840152602090930192600101610703565b92949550505060ff1916825215156020020190565b90610173916106b5565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761077b57604052565b610743565b906101cc61079a9261079160405190565b93848092610739565b0383610759565b61017390610780565b61017360036107a1565b61017360046107a1565b6107cb6101736101739290565b60ff1690565b61017360126107be565b6101739081565b61017390546107db565b61017360026107e2565b90610800906105f4565b600052602052604060002090565b6108256101739161081d600090565b5060006107f6565b6107e2565b61083a91903361087b565b61087b565b600190565b6101739161085a61082592610852600090565b5060016107f6565b6107f6565b61083a919033610b21565b61083a929190610835833383610c4b565b929190610888600061049b565b936001600160a01b0385166001600160a01b03821614610910576001600160a01b0385166001600160a01b038316146108c6576101cc9394506109db565b610530856108d360405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6105308561091d60405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6001600160a01b0390911681526060810193926101cc929091604091610981906020830152565b0152565b90600019906105cb565b6101736101736101739290565b906109ac6101736106149261098f565b8254610985565b634e487b7160e01b600052601160045260246000fd5b919082018092116109d657565b6109b3565b8160006109e78161049b565b6001600160a01b0381166001600160a01b03851603610aac57610a21906101a1610a1a88610a1560026107e2565b6109c9565b600261099c565b6001600160a01b03831603610a87575050610a47610a1a84610a4360026107e2565b0390565b610670610a7d610a777fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef936105f4565b936105f4565b9361025160405190565b610aa791610a94916107f6565b610aa18561015e836107e2565b9061099c565b610a47565b909150610abc61082584846107f6565b858110610ae4578492916101a1610ad588610a21940390565b610adf87866107f6565b61099c565b8361053087610af260405190565b9384937fe450d38c0000000000000000000000000000000000000000000000000000000085526004850161095a565b90916101cc926001925b909192610b38600061049b565b6001600160a01b0381166001600160a01b03841614610c01576001600160a01b0381166001600160a01b03851614610bb75750610b7e84610adf8561085a8660016107f6565b610b8757505050565b610670610a7d610a777f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925936105f4565b61053090610bc460405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61053090610c0e60405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b90929192610c59818361083f565b936000198503610c6b575b5050509050565b808510610c9157610c7f90610c8894950390565b90600092610b2b565b80388080610c64565b906105308592610ca060405190565b9384937ffb8f41b20000000000000000000000000000000000000000000000000000000085526004850161095a565b15610cd657565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60448201527f61746564206164647265737300000000000000000000000000000000000000006064820152608490fd5b906101cc91610d8233610d7c6104d16101a16006546001600160a01b031690565b14610ccf565b6110b4565b60001981146109d65760010190565b634e487b7160e01b600052603260045260246000fd5b9035906101be193682900301821215610102570190565b90821015610dda5760206101739202810190610dac565b610d96565b905051906101cc826101ad565b906020828203126101025761017391610ddf565b60ff81166101b8565b905035906101cc82610e00565b50610173906020810190610e09565b506101739060208101906101d4565b506101739060208101906101bf565b9035601e19368390030181121561010257016020813591019167ffffffffffffffff82116101025736829003831361010257565b90826000939282370152565b919061015481610e9a8161015e9560209181520190565b8095610e77565b9035601e19368390030181121561010257016020813591019167ffffffffffffffff821161010257602082023603831361010257565b818352602090920191906000825b828210610ef3575050505090565b90919293610f22610f1b600192610f0a8886610e34565b6001600160a01b0316815260200190565b9560200190565b93920190610ee5565b61017391611088610ffc6101c08301610f4e610f478680610e16565b60ff168552565b610f65610f5e6020870187610e25565b6020860152565b610f7c610f756040870187610e25565b6040860152565b610f93610f8c6060870187610e25565b6060860152565b610faa610fa36080870187610e25565b6080860152565b610fca610fba60a0870187610e34565b6001600160a01b031660a0860152565b610fe1610fda60c0870187610e25565b60c0860152565b610fee60e0860186610e43565b9085830360e0870152610e83565b9261101961100e610100830183610e16565b60ff16610100850152565b61103261102a610120830183610e25565b610120850152565b61104b611043610140830183610e25565b610140850152565b61106461105c610160830183610e25565b610160850152565b61107d611075610180830183610e25565b610180850152565b6101a0810190610ea1565b916101a0818503910152610ed7565b602080825261017392910190610f2b565b6040513d6000823e3d90fd5b91906110c0600061098f565b818110156111815761111890602063fe7fbd1873__$3a457adf3f2d33c60ddff735cdd91d6a07$__61110d6110f685888b610dc3565b9261110060405190565b9687948593849360e01b90565b835260048301611097565b03915af491821561117c57611149926111449160009161114e575b5061113e600161098f565b90611191565b610d87565b6110c0565b61116f915060203d8111611175575b6111678183610759565b810190610dec565b38611133565b503d61115d565b6110a8565b50509050565b906101cc91610d5b565b919061119d600061049b565b926001600160a01b0384166001600160a01b038216146111c1576101cc92936109db565b610530846108d360405190565b906101cc916111db6104be565b906101cc91611191565b906101cc916111ce56fea2646970667358221220319d7df78beef1437b2f4a0a18444da02fd93e6b175e55d493734819ea0f6b7664736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionAnalyzer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"transactionDecoder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"accessList\",\"type\":\"address[]\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523462000031576200001f62000018620000e5565b90620002c0565b6040516111e46200063d82396111e490f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003157565b905051906200008b826200009c565b919060408382031262000031576200009990620000db8185620000ae565b93602001620000ae565b620001086200182180380380620000fc8162000074565b928339810190620000bd565b9091565b6001600160401b0381116200006e57602090601f01601f19160190565b906200013f62000139836200010c565b62000074565b918252565b62000150600362000129565b622d32b760e91b602082015290565b6200009962000144565b62000175600362000129565b622d22a760e91b602082015290565b6200009962000169565b6200008d62000099620000999290565b62000099906200018e565b15620001b157565b60405162461bcd60e51b8152602060048201526024808201527f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164646044820152637265737360e01b6064820152608490fd5b0390fd5b156200020e57565b60405162461bcd60e51b815260206004820152602360248201527f496e76616c6964207472616e73616374696f6e206465636f646572206164647260448201526265737360e81b6064820152608490fd5b906001600160a01b03905b9181191691161790565b62000099906200008d906001600160a01b031682565b620000999062000274565b62000099906200028a565b90620002b462000099620002bc9262000295565b82546200025f565b9055565b90620003386200008b92620002ea33620002d96200015f565b620002e362000184565b9162000340565b620003306200031e620002fe60006200019e565b6200008d6001600160a01b0382166001600160a01b0386161415620001a9565b6001600160a01b038516141562000206565b6006620002a0565b6007620002a0565b916200034c91620005a9565b6200035860006200019e565b6001600160a01b0381166001600160a01b038316146200037e57506200008b90620005da565b62000202906200038d60405190565b631e4fbdf760e01b8152918291600483016001600160a01b03909116815260200190565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620003ea575b6020831014620003e457565b620003b1565b91607f1691620003d8565b9160001960089290920291821b911b6200026a565b6200009962000099620000999290565b91906200042f62000099620002bc936200040a565b908354620003f5565b6200008b916000916200041a565b81811062000452575050565b8062000462600060019362000438565b0162000446565b9190601f81116200047957505050565b6200048d6200008b93600052602060002090565b906020601f840181900483019310620004b1575b6020601f90910104019062000446565b9091508190620004a1565b90620004c6815190565b906001600160401b0382116200006e57620004ee82620004e78554620003c7565b8562000469565b602090601f83116001146200052d57620002bc92916000918362000521575b5050600019600883021c1916906002021790565b0151905038806200050d565b601f198316916200054385600052602060002090565b9260005b81811062000584575091600293918560019694106200056a575b50505002019055565b01516000196008601f8516021c1916905538808062000561565b9193602060018192878701518155019501920162000547565b906200008b91620004bc565b90620005bb6200008b9260036200059d565b60046200059d565b62000099906200008d565b620000999054620005c3565b620005e66005620005ce565b90620005f4816005620002a0565b6200062b620006247f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000295565b9162000295565b916200063660405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806306fdde03146100e2578063095ea7b3146100dd57806318160ddd146100d857806323b872dd146100d3578063313ce567146100ce578063630ac52c146100c957806370a08231146100c4578063715018a6146100bf5780638da5cb5b146100ba57806395d89b41146100b5578063a9059cbb146100b0578063dd62ed3e146100ab5763f2fde38b036100f25761043d565b610421565b6103e2565b6103c7565b610388565b610370565b610355565b610323565b61029a565b61027e565b610222565b6101f4565b610166565b60009103126100f257565b600080fd5b60005b83811061010a5750506000910152565b81810151838201526020016100fa565b61013b61014460209361014e9361012f815190565b80835293849260200190565b958691016100f7565b601f01601f191690565b0190565b60208082526101639291019061011a565b90565b346100f2576101763660046100e7565b61018d610181610781565b60405191829182610152565b0390f35b6001600160a01b031690565b6001600160a01b0381165b036100f257565b905035906101bc8261019d565b565b806101a8565b905035906101bc826101be565b91906040838203126100f257610163906101eb81856101af565b936020016101c4565b346100f25761018d61021061020a3660046101d1565b90610836565b60405191829182901515815260200190565b346100f2576102323660046100e7565b61018d61023d6107c3565b6040515b9182918290815260200190565b90916060828403126100f25761016361026784846101af565b9361027581602086016101af565b936040016101c4565b346100f25761018d61021061029436600461024e565b91610841565b346100f2576102aa3660046100e7565b61018d6102b56107a8565b6040519182918260ff909116815260200190565b909182601f830112156100f25781359167ffffffffffffffff83116100f25760200192602083028401116100f257565b906020828203126100f257813567ffffffffffffffff81116100f25761031f92016102c9565b9091565b346100f25761033c6103363660046102f9565b90611167565b604051005b906020828203126100f257610163916101af565b346100f25761018d61023d61036b366004610341565b6107e5565b346100f2576103803660046100e7565b61033c61048d565b346100f2576103983660046100e7565b61018d6103ad6005546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b346100f2576103d73660046100e7565b61018d61018161078b565b346100f25761018d6102106103f83660046101d1565b90610801565b91906040838203126100f2576101639061041881856101af565b936020016101af565b346100f25761018d61023d6104373660046103fe565b90610816565b346100f25761033c610450366004610341565b61058e565b61045d610495565b6101bc61047b565b6101916101636101639290565b61016390610465565b6101bc6104886000610472565b6105ef565b6101bc610455565b6005546001600160a01b031633906104b5825b916001600160a01b031690565b036104bd5750565b610507906104ca60405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6101bc90610517610495565b6105216000610472565b6001600160a01b0381166001600160a01b0383161461054457506101bc906105ef565b6105079061055160405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6101bc9061050b565b906001600160a01b03905b9181191691161790565b610191610163610163926001600160a01b031690565b610163906105ac565b610163906105c2565b906105e46101636105eb926105cb565b8254610597565b9055565b6005546001600160a01b0316906106078160056105d4565b61063a6106347f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936105cb565b916105cb565b9161064460405190565b80805b0390a3565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610682575b602083101461067d57565b61064c565b91607f1691610672565b805460009392916106a961069f83610662565b8085529360200190565b91600181169081156106fb57506001146106c257505050565b6106d59192939450600052602060002090565b916000925b8184106106e75750500190565b8054848401526020909301926001016106da565b92949550505060ff1916825215156020020190565b906101639161068c565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761075257604052565b61071a565b906101bc6107719261076860405190565b93848092610710565b0383610730565b61016390610757565b6101636003610778565b6101636004610778565b6107a26101636101639290565b60ff1690565b6101636012610795565b6101639081565b61016390546107b2565b61016360026107b9565b906107d7906105cb565b600052602052604060002090565b6107fc610163916107f4600090565b5060006107cd565b6107b9565b610811919033610852565b610852565b600190565b610163916108316107fc92610829600090565b5060016107cd565b6107cd565b610811919033610af8565b61081192919061080c833383610c22565b92919061085f6000610472565b936001600160a01b0385166001600160a01b038216146108e7576001600160a01b0385166001600160a01b0383161461089d576101bc9394506109b2565b610507856108aa60405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b610507856108f460405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6001600160a01b0390911681526060810193926101bc929091604091610958906020830152565b0152565b90600019906105a2565b6101636101636101639290565b906109836101636105eb92610966565b825461095c565b634e487b7160e01b600052601160045260246000fd5b919082018092116109ad57565b61098a565b8160006109be81610472565b6001600160a01b0381166001600160a01b03851603610a83576109f8906101916109f1886109ec60026107b9565b6109a0565b6002610973565b6001600160a01b03831603610a5e575050610a1e6109f184610a1a60026107b9565b0390565b610647610a54610a4e7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef936105cb565b936105cb565b9361024160405190565b610a7e91610a6b916107cd565b610a788561014e836107b9565b90610973565b610a1e565b909150610a936107fc84846107cd565b858110610abb57849291610191610aac886109f8940390565b610ab687866107cd565b610973565b8361050787610ac960405190565b9384937fe450d38c00000000000000000000000000000000000000000000000000000000855260048501610931565b90916101bc926001925b909192610b0f6000610472565b6001600160a01b0381166001600160a01b03841614610bd8576001600160a01b0381166001600160a01b03851614610b8e5750610b5584610ab6856108318660016107cd565b610b5e57505050565b610647610a54610a4e7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925936105cb565b61050790610b9b60405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61050790610be560405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b90929192610c308183610816565b936000198503610c42575b5050509050565b808510610c6857610c5690610c5f94950390565b90600092610b02565b80388080610c3b565b906105078592610c7760405190565b9384937ffb8f41b200000000000000000000000000000000000000000000000000000000855260048501610931565b15610cad57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60448201527f61746564206164647265737300000000000000000000000000000000000000006064820152608490fd5b906101bc91610d5933610d536104a86101916006546001600160a01b031690565b14610ca6565b61108b565b60001981146109ad5760010190565b634e487b7160e01b600052603260045260246000fd5b9035906101be1936829003018212156100f2570190565b90821015610db15760206101639202810190610d83565b610d6d565b905051906101bc8261019d565b906020828203126100f25761016391610db6565b60ff81166101a8565b905035906101bc82610dd7565b50610163906020810190610de0565b506101639060208101906101c4565b506101639060208101906101af565b9035601e1936839003018112156100f257016020813591019167ffffffffffffffff82116100f2573682900383136100f257565b90826000939282370152565b919061014481610e718161014e9560209181520190565b8095610e4e565b9035601e1936839003018112156100f257016020813591019167ffffffffffffffff82116100f25760208202360383136100f257565b818352602090920191906000825b828210610eca575050505090565b90919293610ef9610ef2600192610ee18886610e0b565b6001600160a01b0316815260200190565b9560200190565b93920190610ebc565b6101639161105f610fd36101c08301610f25610f1e8680610ded565b60ff168552565b610f3c610f356020870187610dfc565b6020860152565b610f53610f4c6040870187610dfc565b6040860152565b610f6a610f636060870187610dfc565b6060860152565b610f81610f7a6080870187610dfc565b6080860152565b610fa1610f9160a0870187610e0b565b6001600160a01b031660a0860152565b610fb8610fb160c0870187610dfc565b60c0860152565b610fc560e0860186610e1a565b9085830360e0870152610e5a565b92610ff0610fe5610100830183610ded565b60ff16610100850152565b611009611001610120830183610dfc565b610120850152565b61102261101a610140830183610dfc565b610140850152565b61103b611033610160830183610dfc565b610160850152565b61105461104c610180830183610dfc565b610180850152565b6101a0810190610e78565b916101a0818503910152610eae565b602080825261016392910190610f02565b6040513d6000823e3d90fd5b91906110976000610966565b81811015611161576110f89060206110c26110bd6110bd6007546001600160a01b031690565b6105cb565b6323bc02dd906110ed6110d685888b610d9a565b926110e060405190565b9687948593849360e01b90565b83526004830161106e565b03915afa91821561115c57611129926111249160009161112e575b5061111e6001610966565b90611171565b610d5e565b611097565b61114f915060203d8111611155575b6111478183610730565b810190610dc3565b38611113565b503d61113d565b61107f565b50509050565b906101bc91610d32565b919061117d6000610472565b926001600160a01b0384166001600160a01b038216146111a1576101bc92936109b2565b610507846108aa6040519056fea2646970667358221220278d99c1097531adcce1df939920329f478a45496964d2f7bc6c675345cb9a2364736f6c63430008140033", } // ZenBaseABI is the input ABI used to generate the binding from. @@ -62,7 +62,7 @@ var ZenBaseABI = ZenBaseMetaData.ABI var ZenBaseBin = ZenBaseMetaData.Bin // DeployZenBase deploys a new Ethereum contract, binding an instance of ZenBase to it. -func DeployZenBase(auth *bind.TransactOpts, backend bind.ContractBackend, transactionsAnalyzer common.Address, name string, symbol string) (common.Address, *types.Transaction, *ZenBase, error) { +func DeployZenBase(auth *bind.TransactOpts, backend bind.ContractBackend, transactionAnalyzer common.Address, transactionDecoder common.Address) (common.Address, *types.Transaction, *ZenBase, error) { parsed, err := ZenBaseMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -71,7 +71,7 @@ func DeployZenBase(auth *bind.TransactOpts, backend bind.ContractBackend, transa return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZenBaseBin), backend, transactionsAnalyzer, name, symbol) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZenBaseBin), backend, transactionAnalyzer, transactionDecoder) if err != nil { return common.Address{}, nil, nil, err } @@ -458,45 +458,24 @@ func (_ZenBase *ZenBaseTransactorSession) Approve(spender common.Address, value return _ZenBase.Contract.Approve(&_ZenBase.TransactOpts, spender, value) } -// Mint is a paid mutator transaction binding the contract method 0x40c10f19. -// -// Solidity: function mint(address to, uint256 amount) returns() -func (_ZenBase *ZenBaseTransactor) Mint(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ZenBase.contract.Transact(opts, "mint", to, amount) -} - -// Mint is a paid mutator transaction binding the contract method 0x40c10f19. -// -// Solidity: function mint(address to, uint256 amount) returns() -func (_ZenBase *ZenBaseSession) Mint(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ZenBase.Contract.Mint(&_ZenBase.TransactOpts, to, amount) -} - -// Mint is a paid mutator transaction binding the contract method 0x40c10f19. -// -// Solidity: function mint(address to, uint256 amount) returns() -func (_ZenBase *ZenBaseTransactorSession) Mint(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ZenBase.Contract.Mint(&_ZenBase.TransactOpts, to, amount) -} - // OnBlockEnd is a paid mutator transaction binding the contract method 0x630ac52c. // // Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[])[] transactions) returns() -func (_ZenBase *ZenBaseTransactor) OnBlockEnd(opts *bind.TransactOpts, transactions []TransactionDecoderTransaction) (*types.Transaction, error) { +func (_ZenBase *ZenBaseTransactor) OnBlockEnd(opts *bind.TransactOpts, transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.contract.Transact(opts, "onBlockEnd", transactions) } // OnBlockEnd is a paid mutator transaction binding the contract method 0x630ac52c. // // Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[])[] transactions) returns() -func (_ZenBase *ZenBaseSession) OnBlockEnd(transactions []TransactionDecoderTransaction) (*types.Transaction, error) { +func (_ZenBase *ZenBaseSession) OnBlockEnd(transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.Contract.OnBlockEnd(&_ZenBase.TransactOpts, transactions) } // OnBlockEnd is a paid mutator transaction binding the contract method 0x630ac52c. // // Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[])[] transactions) returns() -func (_ZenBase *ZenBaseTransactorSession) OnBlockEnd(transactions []TransactionDecoderTransaction) (*types.Transaction, error) { +func (_ZenBase *ZenBaseTransactorSession) OnBlockEnd(transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.Contract.OnBlockEnd(&_ZenBase.TransactOpts, transactions) } diff --git a/contracts/src/system/OnBlockEndCallback.sol b/contracts/src/system/OnBlockEndCallback.sol new file mode 100644 index 0000000000..c09905720d --- /dev/null +++ b/contracts/src/system/OnBlockEndCallback.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; +import "./Transaction.sol"; + + +interface OnBlockEndCallback { + function onBlockEnd(Structs.Transaction[] calldata transactions) external; +} \ No newline at end of file diff --git a/contracts/src/system/Transaction.sol b/contracts/src/system/Transaction.sol new file mode 100644 index 0000000000..8c7f6e3a36 --- /dev/null +++ b/contracts/src/system/Transaction.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; + + + +library Structs { + using MessageHashUtils for bytes32; + using ECDSA for bytes32; + + struct Transaction { + uint8 txType; + uint256 chainId; + uint256 nonce; + uint256 gasPrice; + uint256 gasLimit; + address to; + uint256 value; + bytes data; + uint8 v; + bytes32 r; + bytes32 s; + uint256 maxPriorityFeePerGas; + uint256 maxFeePerGas; + address[] accessList; + } + + function recoverSender(Transaction calldata txData) external pure returns (address sender) { + // Step 1: Hash the transaction data excluding the signature fields (v, r, s) + bytes32 dataHash = keccak256( + abi.encode( + txData.txType, + txData.chainId, + txData.nonce, + txData.gasPrice, + txData.gasLimit, + txData.to, + txData.value, + txData.data, + txData.maxPriorityFeePerGas, + txData.maxFeePerGas, + txData.accessList + ) + ); + + // Step 2: Prefix the hash with the standard Ethereum message prefix + bytes32 ethSignedHash = dataHash.toEthSignedMessageHash(); + + // Step 3: Recover the address using the signature parameters + sender = ECDSA.recover(ethSignedHash, txData.v, txData.r, txData.s); + + return sender; + } +} \ No newline at end of file diff --git a/contracts/src/system/TransactionDecoder.sol b/contracts/src/system/TransactionDecoder.sol index 5be0f3bb1c..b2edf96a78 100644 --- a/contracts/src/system/TransactionDecoder.sol +++ b/contracts/src/system/TransactionDecoder.sol @@ -1,60 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; - +import "./Transaction.sol"; library TransactionDecoder { - using MessageHashUtils for bytes32; - using ECDSA for bytes32; - - struct Transaction { - uint8 txType; - uint256 chainId; - uint256 nonce; - uint256 gasPrice; - uint256 gasLimit; - address to; - uint256 value; - bytes data; - uint8 v; - bytes32 r; - bytes32 s; - uint256 maxPriorityFeePerGas; - uint256 maxFeePerGas; - address[] accessList; - } - - function recoverSender(Transaction calldata txData) external pure returns (address sender) { - // Step 1: Hash the transaction data excluding the signature fields (v, r, s) - bytes32 dataHash = keccak256( - abi.encode( - txData.txType, - txData.chainId, - txData.nonce, - txData.gasPrice, - txData.gasLimit, - txData.to, - txData.value, - txData.data, - txData.maxPriorityFeePerGas, - txData.maxFeePerGas, - txData.accessList - ) - ); - - // Step 2: Prefix the hash with the standard Ethereum message prefix - bytes32 ethSignedHash = dataHash.toEthSignedMessageHash(); + using Structs for Structs.Transaction; - // Step 3: Recover the address using the signature parameters - sender = ECDSA.recover(ethSignedHash, txData.v, txData.r, txData.s); - - return sender; - } - - - function decode(bytes calldata rawTransaction) internal pure returns (Transaction memory) { + function decode(bytes calldata rawTransaction) internal pure returns (Structs.Transaction memory) { require(rawTransaction.length > 0, "Empty transaction data"); uint8 _txType = uint8(rawTransaction[0]); @@ -69,8 +21,8 @@ library TransactionDecoder { } } - function decodeLegacyTransaction(bytes calldata rawTransaction) private pure returns (Transaction memory) { - Transaction memory _tx; + function decodeLegacyTransaction(bytes calldata rawTransaction) private pure returns (Structs.Transaction memory) { + Structs.Transaction memory _tx; _tx.txType = 0; (_tx.nonce, _tx.gasPrice, _tx.gasLimit, _tx.to, _tx.value, _tx.data, _tx.v, _tx.r, _tx.s) = @@ -79,8 +31,8 @@ library TransactionDecoder { return _tx; } - function decodeEIP2930Transaction(bytes calldata rawTransaction) private pure returns (Transaction memory) { - Transaction memory _tx; + function decodeEIP2930Transaction(bytes calldata rawTransaction) private pure returns (Structs.Transaction memory) { + Structs.Transaction memory _tx; _tx.txType = 1; (_tx.chainId, _tx.nonce, _tx.gasPrice, _tx.gasLimit, _tx.to, _tx.value, _tx.data, _tx.accessList, _tx.v, _tx.r, _tx.s) = @@ -89,8 +41,8 @@ library TransactionDecoder { return _tx; } - function decodeEIP1559Transaction(bytes calldata rawTransaction) private pure returns (Transaction memory) { - Transaction memory _tx; + function decodeEIP1559Transaction(bytes calldata rawTransaction) private pure returns (Structs.Transaction memory) { + Structs.Transaction memory _tx; _tx.txType = 2; (_tx.chainId, _tx.nonce, _tx.maxPriorityFeePerGas, _tx.maxFeePerGas, _tx.gasLimit, _tx.to, _tx.value, _tx.data, _tx.accessList, _tx.v, _tx.r, _tx.s) = @@ -98,27 +50,4 @@ library TransactionDecoder { return _tx; } - - function getTo(Transaction memory _tx) internal pure returns (address) { - return _tx.to; - } - - function getValue(Transaction memory _tx) internal pure returns (uint256) { - return _tx.value; - } - - function getData(Transaction memory _tx) internal pure returns (bytes memory) { - return _tx.data; - } - - function getNonce(Transaction memory _tx) internal pure returns (uint256) { - return _tx.nonce; - } - - function getGasPrice(Transaction memory _tx) internal pure returns (uint256) { - if (_tx.txType == 2) { - return _tx.maxFeePerGas; - } - return _tx.gasPrice; - } } \ No newline at end of file diff --git a/contracts/src/system/TransactionsAnalyzer.sol b/contracts/src/system/TransactionsAnalyzer.sol index 0266989d64..8547d98d77 100644 --- a/contracts/src/system/TransactionsAnalyzer.sol +++ b/contracts/src/system/TransactionsAnalyzer.sol @@ -5,11 +5,7 @@ import "@openzeppelin/contracts/access/AccessControl.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import "./TransactionDecoder.sol"; - - -interface OnBlockEndCallback { - function onBlockEnd(TransactionDecoder.Transaction[] calldata transactions) external; -} +import "./OnBlockEndCallback.sol"; //TODO: @PR Review - Pick appropriate name contract TransactionsAnalyzer is Initializable, AccessControl{ @@ -50,7 +46,7 @@ contract TransactionsAnalyzer is Initializable, AccessControl{ _grantRole(HOOK_CALLER_ROLE, authorizedCaller); } - function addOnBlockEndCallback(address callbackAddress) public onlyRole(EOA_ADMIN_ROLE) { + function addOnBlockEndCallback(address callbackAddress) public { onBlockEndListeners.push(OnBlockEndCallback(callbackAddress)); } @@ -59,7 +55,7 @@ contract TransactionsAnalyzer is Initializable, AccessControl{ return; } - TransactionDecoder.Transaction[] memory transactions = new TransactionDecoder.Transaction[](_block.transactions.length); + Structs.Transaction[] memory transactions = new Structs.Transaction[](_block.transactions.length); for (uint256 i = 0; i < _block.transactions.length; ++i) { transactions[i] = (TransactionDecoder.decode(_block.transactions[i])); diff --git a/contracts/src/zen/ZenBase.sol b/contracts/src/zen/ZenBase.sol index 77d08a776c..3aa353ef44 100644 --- a/contracts/src/zen/ZenBase.sol +++ b/contracts/src/zen/ZenBase.sol @@ -1,58 +1,59 @@ // SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.0; - +/* // Import OpenZeppelin Contracts -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; -import "../system/TransactionsAnalyzer.sol"; import "../system/TransactionDecoder.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +*/ + +import "../system/OnBlockEndCallback.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + + +interface ITransactionDecoder { + function recoverSender(Structs.Transaction calldata txData) external view returns (address sender); +} + /** * @title ZenBase * @dev ERC20 Token with minting functionality. */ -contract ZenBase { +contract ZenBase is OnBlockEndCallback, ERC20, Ownable { + using Structs for Structs.Transaction; /** * @dev Constructor that gives msg.sender all of existing tokens. * You can customize the initial supply as needed. */ - constructor(address transactionsAnalyzer, string memory , string memory) { - _caller = transactionsAnalyzer; + constructor(address transactionAnalyzer, address transactionDecoder) ERC20("Zen", "ZEN") Ownable(msg.sender) { + require(transactionAnalyzer != address(0), "Invalid transaction analyzer address"); + require(transactionDecoder != address(0), "Invalid transaction decoder address"); + _caller = transactionAnalyzer; + _transactionDecoder = transactionDecoder; } + address private _caller; - + address private _transactionDecoder; modifier onlyCaller() { require(msg.sender == _caller, "Caller: caller is not the designated address"); _; } - function onBlockEnd(TransactionDecoder.Transaction[] calldata transactions) external view onlyCaller { + function onBlockEnd(Structs.Transaction[] calldata transactions) external onlyCaller { // Implement custom logic here for (uint256 i=0; i Date: Thu, 26 Sep 2024 12:04:44 +0300 Subject: [PATCH 04/23] Kind of fixed. Balances do not match, but overall everything is wired. --- go/enclave/components/batch_executor.go | 2 +- go/enclave/evm/evm_facade.go | 4 +++ go/enclave/nodetype/sequencer.go | 11 +++--- go/enclave/system/hooks.go | 31 ++++++++++++++-- integration/simulation/simulation.go | 18 ++++++---- integration/simulation/validate_chain.go | 45 ++++++++++++++++++++++++ 6 files changed, 94 insertions(+), 17 deletions(-) diff --git a/go/enclave/components/batch_executor.go b/go/enclave/components/batch_executor.go index 1a5bad480b..9a425c61fb 100644 --- a/go/enclave/components/batch_executor.go +++ b/go/enclave/components/batch_executor.go @@ -313,7 +313,7 @@ func (executor *batchExecutor) ComputeBatch(ctx context.Context, context *BatchE return &ComputedBatch{ Batch: ©Batch, - TxExecResults: append(txResults), + TxExecResults: append(txResults, ccTxResults...), Commit: commitFunc, }, nil } diff --git a/go/enclave/evm/evm_facade.go b/go/enclave/evm/evm_facade.go index b6d6d0515c..5d28d9dbaa 100644 --- a/go/enclave/evm/evm_facade.go +++ b/go/enclave/evm/evm_facade.go @@ -91,6 +91,7 @@ func ExecuteTransactions( (fromTxIndex+i)-tCountRollback, hash, header.Number.Uint64(), + logger, ) result[t.Tx.Hash()] = txResult if txResult.Err != nil { @@ -128,6 +129,7 @@ func executeTransaction( tCount int, batchHash common.L2BatchHash, batchHeight uint64, + logger gethlog.Logger, ) *core.TxExecResult { var createdContracts []*gethcommon.Address rules := cc.Rules(big.NewInt(0), true, 0) @@ -144,9 +146,11 @@ func executeTransaction( OnCodeChange: func(addr gethcommon.Address, prevCodeHash gethcommon.Hash, prevCode []byte, codeHash gethcommon.Hash, code []byte) { // only proceed for new deployments. if len(prevCode) > 0 { + logger.Debug("OnCodeChange: Skipping contract deployment", "address", addr.Hex()) return } createdContracts = append(createdContracts, &addr) + logger.Debug("OnCodeChange: Contract deployed", "address", addr.Hex()) }, }) defer s.SetLogger(nil) diff --git a/go/enclave/nodetype/sequencer.go b/go/enclave/nodetype/sequencer.go index 9fef598653..21eb3299ee 100644 --- a/go/enclave/nodetype/sequencer.go +++ b/go/enclave/nodetype/sequencer.go @@ -174,13 +174,13 @@ func (s *sequencer) createGenesisBatch(ctx context.Context, block *types.Header) wallet := system.GetPlaceholderWallet(s.chainConfig.ChainID, s.logger) msgBusTx, err := system.MessageBusInitTransaction(wallet, s.logger) if err != nil { - s.logger.Error("[SystemContracts] Failed to create message bus contract", log.ErrKey, err) + s.logger.Crit("[SystemContracts] Failed to create message bus contract", log.ErrKey, err) return err } systemDeployerTx, err := system.SystemDeployerInitTransaction(wallet, s.logger, wallet.Address()) if err != nil { - s.logger.Error("[SystemContracts] Failed to create system deployer contract", log.ErrKey, err) + s.logger.Crit("[SystemContracts] Failed to create system deployer contract", log.ErrKey, err) return err } @@ -208,14 +208,13 @@ func (s *sequencer) createGenesisBatch(ctx context.Context, block *types.Header) } if len(cb.TxExecResults) == 0 || cb.TxExecResults[0].Receipt.TxHash.Hex() != msgBusTx.Hash().Hex() { - err = fmt.Errorf("message Bus contract not minted - no receipts in batch") - s.logger.Error(err.Error()) - return err + err = fmt.Errorf("failed to mint Message Bus contract: expected receipt for transaction %s, but no receipts found in batch", msgBusTx.Hash().Hex()) + s.logger.Crit(err.Error()) // Fatal error, the node cannot be started. } systemAddresses, err := system.DeriveAddresses(cb.TxExecResults[1].Receipt) if err != nil { - s.logger.Error("Failed to derive system contract addresses", log.ErrKey, err) + s.logger.Crit("Failed to derive system contract addresses", log.ErrKey, err) return err } s.logger.Info("[SystemContracts] Deployer initialized", "transactionAnalyzer", systemAddresses.ToString()) diff --git a/go/enclave/system/hooks.go b/go/enclave/system/hooks.go index 8faf74a951..82d4cd1c12 100644 --- a/go/enclave/system/hooks.go +++ b/go/enclave/system/hooks.go @@ -56,26 +56,35 @@ func (s *systemContractCallbacks) GetOwner() gethcommon.Address { } func (s *systemContractCallbacks) Load() error { + s.logger.Info("Load: Initializing system contracts") + if s.storage == nil { + s.logger.Error("Load: Storage is not set") return fmt.Errorf("storage is not set") } - batch, err := s.storage.FetchBatchBySeqNo(context.Background(), 1) + batchSeqNo := uint64(1) + s.logger.Debug("Load: Fetching batch", "batchSeqNo", batchSeqNo) + batch, err := s.storage.FetchBatchBySeqNo(context.Background(), batchSeqNo) if err != nil { + s.logger.Error("Load: Failed fetching batch", "batchSeqNo", batchSeqNo, "error", err) return fmt.Errorf("failed fetching batch %w", err) } if len(batch.Transactions) < 2 { + s.logger.Error("Load: Genesis batch does not have enough transactions", "batchSeqNo", batchSeqNo, "transactionCount", len(batch.Transactions)) return fmt.Errorf("genesis batch does not have enough transactions") } receipt, err := s.storage.GetTransactionReceipt(context.Background(), batch.Transactions[1].Hash()) if err != nil { + s.logger.Error("Load: Failed fetching receipt", "transactionHash", batch.Transactions[1].Hash().Hex(), "error", err) return fmt.Errorf("failed fetching receipt %w", err) } addresses, err := DeriveAddresses(receipt) if err != nil { + s.logger.Error("Load: Failed deriving addresses", "error", err, "receiptHash", receipt.TxHash.Hex()) return fmt.Errorf("failed deriving addresses %w", err) } @@ -93,40 +102,53 @@ func (s *systemContractCallbacks) initializeRequiredAddresses(addresses SystemCo } func (s *systemContractCallbacks) Initialize(batch *core.Batch, receipts types.Receipts) error { + s.logger.Info("Initialize: Starting initialization of system contracts", "batchSeqNo", batch.SeqNo) + if len(receipts) < 2 { + s.logger.Error("Initialize: Genesis batch does not have enough receipts", "expected", 2, "got", len(receipts)) return fmt.Errorf("genesis batch does not have enough receipts") } - addresses, err := DeriveAddresses(receipts[1]) + receiptIndex := 1 + s.logger.Debug("Initialize: Deriving addresses from receipt", "receiptIndex", receiptIndex, "transactionHash", receipts[receiptIndex].TxHash.Hex()) + addresses, err := DeriveAddresses(receipts[receiptIndex]) if err != nil { + s.logger.Error("Initialize: Failed deriving addresses", "error", err, "receiptHash", receipts[receiptIndex].TxHash.Hex()) return fmt.Errorf("failed deriving addresses %w", err) } + s.logger.Info("Initialize: Initializing required addresses", "addresses", addresses) return s.initializeRequiredAddresses(addresses) } func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Context, l2State *state.StateDB, batch *core.Batch, receipts common.L2Receipts) (*common.L2Tx, error) { if s.transactionsAnalyzerAddress == nil { + s.logger.Debug("CreateOnBatchEndTransaction: TransactionsAnalyzerAddress is nil, skipping transaction creation") return nil, nil } + s.logger.Info("CreateOnBatchEndTransaction: Creating transaction on batch end", "batchSeqNo", batch.SeqNo) + nonceForSyntheticTx := l2State.GetNonce(s.GetOwner()) + s.logger.Debug("CreateOnBatchEndTransaction: Retrieved nonce for synthetic transaction", "nonce", nonceForSyntheticTx) blockTransactions := TransactionsAnalyzer.TransactionsAnalyzerBlockTransactions{ Transactions: make([][]byte, 0), } for _, tx := range batch.Transactions { - encodedBytes, err := rlp.EncodeToBytes(tx) if err != nil { + s.logger.Error("CreateOnBatchEndTransaction: Failed encoding transaction", "transactionHash", tx.Hash().Hex(), "error", err) return nil, fmt.Errorf("failed encoding transaction for onBlock %w", err) } blockTransactions.Transactions = append(blockTransactions.Transactions, encodedBytes) + s.logger.Debug("CreateOnBatchEndTransaction: Encoded transaction", "transactionHash", tx.Hash().Hex()) } data, err := transactionsAnalyzerABI.Pack("onBlock", blockTransactions) if err != nil { + s.logger.Error("CreateOnBatchEndTransaction: Failed packing onBlock data", "error", err) return nil, fmt.Errorf("failed packing onBlock() %w", err) } @@ -139,10 +161,13 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex To: s.transactionsAnalyzerAddress, } + s.logger.Debug("CreateOnBatchEndTransaction: Signing transaction", "to", s.transactionsAnalyzerAddress.Hex(), "nonce", nonceForSyntheticTx) signedTx, err := s.ownerWallet.SignTransaction(tx) if err != nil { + s.logger.Error("CreateOnBatchEndTransaction: Failed signing transaction", "error", err) return nil, fmt.Errorf("failed signing transaction %w", err) } + s.logger.Info("CreateOnBatchEndTransaction: Successfully created signed transaction", "transactionHash", signedTx.Hash().Hex()) return signedTx, nil } diff --git a/integration/simulation/simulation.go b/integration/simulation/simulation.go index 38ac56a551..2ede0bad51 100644 --- a/integration/simulation/simulation.go +++ b/integration/simulation/simulation.go @@ -239,9 +239,12 @@ func (s *Simulation) deployTenZen() { if err != nil { panic(fmt.Errorf("failed to create transactor in order to bootstrap sim test: %w", err)) } + + // Node one, because random client might yield the no p2p node, which breaks the timings + rpcClient := s.RPCHandles.TenWalletClient(s.Params.Wallets.L2FaucetWallet.Address(), 1) var cfg *common.TenNetworkInfo for cfg == nil || cfg.TransactionAnalyzerAddress.Cmp(gethcommon.Address{}) == 0 { - cfg, err = s.RPCHandles.TenWalletRndClient(s.Params.Wallets.L2FaucetWallet).GetConfig() + cfg, err = rpcClient.GetConfig() if err != nil { s.TxInjector.logger.Info("failed to get config", log.ErrKey, err) } @@ -249,7 +252,7 @@ func (s *Simulation) deployTenZen() { } for { - balance, err := s.RPCHandles.TenWalletRndClient(s.Params.Wallets.L2FaucetWallet).BalanceAt(context.Background(), nil) + balance, err := rpcClient.BalanceAt(context.Background(), nil) if err != nil { panic(fmt.Errorf("failed to get balance: %w", err)) } @@ -260,23 +263,24 @@ func (s *Simulation) deployTenZen() { } owner := s.Params.Wallets.L2FaucetWallet + ownerRpc := s.RPCHandles.TenWalletClient(owner.Address(), 1) auth.GasPrice = big.NewInt(0).SetUint64(gethparams.InitialBaseFee) auth.Context = context.Background() auth.Nonce = big.NewInt(0).SetUint64(NextNonce(s.ctx, s.RPCHandles, owner)) - address, stx, _, err := Structs.DeployStructs(auth, s.RPCHandles.TenWalletRndClient(owner)) + address, stx, _, err := Structs.DeployStructs(auth, ownerRpc) if err != nil { panic(fmt.Errorf("failed to deploy transaction decoder: %w", err)) } - receipt, err := bind.WaitMined(s.ctx, s.RPCHandles.TenWalletRndClient(owner), stx) + receipt, err := bind.WaitMined(s.ctx, ownerRpc, stx) if err != nil || receipt.Status != types.ReceiptStatusSuccessful { panic("failed to deploy transaction decoder") } auth.Nonce = big.NewInt(0).SetUint64(NextNonce(s.ctx, s.RPCHandles, owner)) - zenBaseAddress, signedTx, _, err := ZenBase.DeployZenBase(auth, s.RPCHandles.TenWalletRndClient(owner), cfg.TransactionAnalyzerAddress, address) //, "ZenBase", "ZEN") + zenBaseAddress, signedTx, _, err := ZenBase.DeployZenBase(auth, ownerRpc, cfg.TransactionAnalyzerAddress, address) //, "ZenBase", "ZEN") if err != nil { panic(fmt.Errorf("failed to deploy zen base contract: %w", err)) } @@ -285,7 +289,7 @@ func (s *Simulation) deployTenZen() { } s.ZenBaseAddress = zenBaseAddress - transactionsAnalyzer, err := TransactionsAnalyzer.NewTransactionsAnalyzer(cfg.TransactionAnalyzerAddress, s.RPCHandles.TenWalletRndClient(owner)) + transactionsAnalyzer, err := TransactionsAnalyzer.NewTransactionsAnalyzer(cfg.TransactionAnalyzerAddress, ownerRpc) if err != nil { panic(fmt.Errorf("failed to deploy transactions analyzer contract: %w", err)) } @@ -295,7 +299,7 @@ func (s *Simulation) deployTenZen() { if err != nil { panic(fmt.Errorf("failed to add on block end callback: %w", err)) } - receipt, err = bind.WaitMined(s.ctx, s.RPCHandles.TenWalletRndClient(owner), tx) + receipt, err = bind.WaitMined(s.ctx, ownerRpc, tx) if err != nil || receipt.Status != types.ReceiptStatusSuccessful { panic(fmt.Errorf("failed to add on block end callback")) } diff --git a/integration/simulation/validate_chain.go b/integration/simulation/validate_chain.go index 6543a2b103..c0185cce98 100644 --- a/integration/simulation/validate_chain.go +++ b/integration/simulation/validate_chain.go @@ -11,6 +11,7 @@ import ( "time" "github.com/ten-protocol/go-ten/contracts/generated/MessageBus" + "github.com/ten-protocol/go-ten/contracts/generated/ZenBase" testcommon "github.com/ten-protocol/go-ten/integration/common" "github.com/ten-protocol/go-ten/integration/ethereummock" @@ -28,6 +29,7 @@ import ( "github.com/ten-protocol/go-ten/go/ethadapter" "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/core/types" gethcommon "github.com/ethereum/go-ethereum/common" @@ -57,6 +59,7 @@ func checkNetworkValidity(t *testing.T, s *Simulation) { checkTenBlockchainValidity(t, s, l1MaxHeight) checkReceivedLogs(t, s) checkTenscan(t, s) + checkZenBaseMinting(t, s) } // Ensures that L1 and L2 txs were actually issued. @@ -322,6 +325,48 @@ func verifyGasBridgeTransactions(t *testing.T, s *Simulation, nodeIdx int) { } } +func checkZenBaseMinting(t *testing.T, s *Simulation) { + // Map to track the number of transactions per sender + txCountPerSender := make(map[gethcommon.Address]int) + + // Aggregate transaction counts from Transfer and Withdrawal transactions + for _, tx := range s.TxInjector.TxTracker.TransferL2Transactions { + sender := getSender(tx) + txCountPerSender[sender]++ + } + + for _, tx := range s.TxInjector.TxTracker.WithdrawalL2Transactions { + sender := getSender(tx) + txCountPerSender[sender]++ + } + + for _, tx := range s.TxInjector.TxTracker.NativeValueTransferL2Transactions { + sender := getSender(tx) + txCountPerSender[sender]++ + } + + // Iterate through each sender and verify ZenBase balance + for sender, expectedMinted := range txCountPerSender { + + senderRpc := s.RPCHandles.TenWalletClient(sender, 1) + zenBaseContract, err := ZenBase.NewZenBase(s.ZenBaseAddress, senderRpc) + if err != nil { + panic(err) + } + zenBaseBalance, err := zenBaseContract.BalanceOf(&bind.CallOpts{ + From: sender, + }, gethcommon.Address{}) + if err != nil { + panic(err) + } + + expectedBalance := big.NewInt(int64(expectedMinted)) // Assuming 1 ZenBase per transaction + if zenBaseBalance.Cmp(expectedBalance) != 0 { + t.Errorf("Sender %s: Expected ZenBase balance %d, but found %d", sender.Hex(), expectedBalance, zenBaseBalance) + } + } +} + func checkBlockchainOfTenNode(t *testing.T, rpcHandles *network.RPCHandles, minTenHeight uint64, maxEthereumHeight uint64, s *Simulation, wg *sync.WaitGroup, heights []uint64, nodeIdx int) { defer wg.Done() tenClient := rpcHandles.TenClients[nodeIdx] From 5bd14c9eda6124982827b4813507f69a396d9559 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Wed, 2 Oct 2024 15:46:11 +0300 Subject: [PATCH 05/23] Working version. --- contracts/generated/Structs/Structs.go | 18 +- .../SystemDeployer/SystemDeployer.go | 2 +- .../TransactionsAnalyzer.go | 175 ++++++++++++++++-- contracts/generated/ZenBase/ZenBase.go | 173 ++++++++++++++--- contracts/src/system/Transaction.sol | 35 +--- contracts/src/system/TransactionDecoder.sol | 53 ------ contracts/src/system/TransactionsAnalyzer.sol | 41 +--- contracts/src/zen/ZenBase.sol | 26 +-- go/enclave/components/batch_executor.go | 44 ++++- go/enclave/system/hooks.go | 82 ++++++-- integration/simulation/validate_chain.go | 20 +- 11 files changed, 461 insertions(+), 208 deletions(-) delete mode 100644 contracts/src/system/TransactionDecoder.sol diff --git a/contracts/generated/Structs/Structs.go b/contracts/generated/Structs/Structs.go index 390da149de..cc43501e3b 100644 --- a/contracts/generated/Structs/Structs.go +++ b/contracts/generated/Structs/Structs.go @@ -32,7 +32,6 @@ var ( // StructsTransaction is an auto generated low-level Go binding around an user-defined struct. type StructsTransaction struct { TxType uint8 - ChainId *big.Int Nonce *big.Int GasPrice *big.Int GasLimit *big.Int @@ -44,13 +43,12 @@ type StructsTransaction struct { S [32]byte MaxPriorityFeePerGas *big.Int MaxFeePerGas *big.Int - AccessList []common.Address } // StructsMetaData contains all meta data concerning the Structs contract. var StructsMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"accessList\",\"type\":\"address[]\"}],\"internalType\":\"structStructs.Transaction\",\"name\":\"txData\",\"type\":\"tuple\"}],\"name\":\"recoverSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x60806040523461001e5760405161069e61002482393081505061069e90f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c638314c06f0361003657610072565b90816101c09103126100365790565b600080fd5b9060208282031261003657813567ffffffffffffffff8111610036576100619201610027565b90565b6001600160a01b031690565b565b6100a261008861008336600461003b565b6102b6565b604051918291826001600160a01b03909116815260200190565b0390f35b60ff81165b0361003657565b35610061816100a6565b806100ab565b35610061816100bc565b6001600160a01b0381166100ab565b35610061816100cc565b903590601e193682900301821215610036570180359067ffffffffffffffff8211610036576020019136829003831361003657565b903590601e193682900301821215610036570180359067ffffffffffffffff82116100365760200191602082023603831361003657565b90826000939282370152565b919061017b81610174816101859560209181520190565b8095610151565b601f01601f191690565b0190565b90503590610070826100cc565b50610061906020810190610189565b818352602090920191906000825b8282106101c1575050505090565b909192936101f06101e96001926101d88886610196565b6001600160a01b0316815260200190565b9560200190565b939201906101b3565b999b9c9a9895939196949290966101608b019760008c0161021b9160ff169052565b60208b015260408a0152606089015260808801526001600160a01b031660a087015260c086015284820360e08601526102539261015d565b936101008301610261919052565b610120820152808303906101400152610061926101a5565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff8211176102b157604052565b610279565b6102bf816100b2565b6102cb602083016100c2565b6102d7604084016100c2565b906102e4606085016100c2565b926102f1608086016100c2565b6102fd60a087016100db565b9061030a60c088016100c2565b61031760e08901896100e5565b6103246101608b016100c2565b916103326101808c016100c2565b936103416101a08d018d61011a565b97909661034d60405190565b9c8d9c60208e019c61035f9c8e6101f9565b90810382520361036f908261028f565b805190602001206103a9907f19457468657265756d205369676e6564204d6573736167653a0a333200000000600052601c52603c60002090565b906103b761010082016100b2565b906103c561012082016100c2565b90610140016103d3906100c2565b6100619384936103e39391610458565b90929192610550565b6100616100616100619290565b610061906103ec565b6100646100616100619290565b61006190610402565b61044861007094610441606094989795610437608086019a6000870152565b60ff166020850152565b6040830152565b0152565b6040513d6000823e3d90fd5b9091610463846103f9565b61049361048f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a06103ec565b9190565b1161050d57906104b5602094600094936104ac60405190565b94859485610418565b838052039060015afa15610508576000516000916104d28361040f565b6001600160a01b0381166001600160a01b038416146104fb57506104f5836103ec565b91929190565b91506104f56001936103ec565b61044c565b50505061051a600061040f565b9160039190565b634e487b7160e01b600052602160045260246000fd5b6004111561054157565b610521565b9061007082610537565b61055a6000610546565b61056382610546565b0361056c575050565b6105766001610546565b61057f82610546565b036105b3576040517ff645eedf000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b6105bd6002610546565b6105c682610546565b0361060d576105af6105d7836103f9565b6040519182917ffce698f70000000000000000000000000000000000000000000000000000000083526004830190815260200190565b61062061061a6003610546565b91610546565b146106285750565b6105af9061063560405190565b9182917fd78bce0c000000000000000000000000000000000000000000000000000000008352600483019081526020019056fea2646970667358221220c65c0636aae937e4abd84684e03270a4926f575a45974a78aecc6bdde8f5898e64736f6c63430008140033", + ABI: "[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.Transaction\",\"name\":\"txData\",\"type\":\"tuple\"}],\"name\":\"recoverSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x60806040523461001e576040516105e56100248239308150506105e590f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c638314c06f0361003657610085565b90816101809103126100365790565b600080fd5b9060208282031261003657813567ffffffffffffffff8111610036576100619201610027565b90565b6001600160a01b031690565b6001600160a01b03909116815260200190565b565b6100a761009b61009636600461003b565b610212565b60405191829182610070565b0390f35b60ff81165b0361003657565b35610061816100ab565b806100b0565b35610061816100c1565b6001600160a01b0381166100b0565b35610061816100d1565b903590601e193682900301821215610036570180359067ffffffffffffffff8211610036576020019136829003831361003657565b90826000939282370152565b919061014981610142816101539560209181520190565b809561011f565b601f01601f191690565b0190565b956101c0906101b961019e976101a96100839d9f9e9c96986101a26101009d979960408e61019e6101cd9e61019761012084019f600085019060ff169052565b6020830152565b0152565b60608c0152565b6001600160a01b031660808a0152565b60a0880152565b85830360c087015261012b565b9660e0830152565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761020d57604052565b6101d5565b610061906102f7610222826100b7565b6102b5610231602085016100c7565b61023d604086016100c7565b926102a961024d606088016100c7565b8761025a608082016100e0565b61026660a083016100c7565b9061027460c08401846100ea565b92909161029161016061028a61014088016100c7565b96016100c7565b9561029b60405190565b9b8c9a60208c019a8b610157565b908103825203826101eb565b6102c76102c0825190565b9160200190565b207f19457468657265756d205369676e6564204d6573736167653a0a333200000000600052601c52603c60002090565b9061030460e082016100b7565b61031e61012061031761010085016100c7565b93016100c7565b6100619361032e9391929061039f565b90929192610497565b6100616100616100619290565b61006190610337565b6100646100616100619290565b6100619061034d565b61019e6100839461038c606094989795610382608086019a6000870152565b60ff166020850152565b6040830152565b6040513d6000823e3d90fd5b90916103aa84610344565b6103da6103d67f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0610337565b9190565b1161045457906103fc602094600094936103f360405190565b94859485610363565b838052039060015afa1561044f576000516000916104198361035a565b6001600160a01b0381166001600160a01b03841614610442575061043c83610337565b91929190565b915061043c600193610337565b610393565b505050610461600061035a565b9160039190565b634e487b7160e01b600052602160045260246000fd5b6004111561048857565b610468565b906100838261047e565b6104a1600061048d565b6104aa8261048d565b036104b3575050565b6104bd600161048d565b6104c68261048d565b036104fa576040517ff645eedf000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b610504600261048d565b61050d8261048d565b03610554576104f661051e83610344565b6040519182917ffce698f70000000000000000000000000000000000000000000000000000000083526004830190815260200190565b610567610561600361048d565b9161048d565b1461056f5750565b6104f69061057c60405190565b9182917fd78bce0c000000000000000000000000000000000000000000000000000000008352600483019081526020019056fea264697066735822122094db7b9a0a1dbf0c452203de6f7e97cba3e05fc1def5e3ae5efbdebc932f7da564736f6c63430008140033", } // StructsABI is the input ABI used to generate the binding from. @@ -220,9 +218,9 @@ func (_Structs *StructsTransactorRaw) Transact(opts *bind.TransactOpts, method s return _Structs.Contract.contract.Transact(opts, method, params...) } -// RecoverSender is a free data retrieval call binding the contract method 0x23bc02dd. +// RecoverSender is a free data retrieval call binding the contract method 0x0cb57856. // -// Solidity: function recoverSender((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[]) txData) pure returns(address sender) +// Solidity: function recoverSender((uint8,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256) txData) pure returns(address sender) func (_Structs *StructsCaller) RecoverSender(opts *bind.CallOpts, txData StructsTransaction) (common.Address, error) { var out []interface{} err := _Structs.contract.Call(opts, &out, "recoverSender", txData) @@ -237,16 +235,16 @@ func (_Structs *StructsCaller) RecoverSender(opts *bind.CallOpts, txData Structs } -// RecoverSender is a free data retrieval call binding the contract method 0x23bc02dd. +// RecoverSender is a free data retrieval call binding the contract method 0x0cb57856. // -// Solidity: function recoverSender((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[]) txData) pure returns(address sender) +// Solidity: function recoverSender((uint8,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256) txData) pure returns(address sender) func (_Structs *StructsSession) RecoverSender(txData StructsTransaction) (common.Address, error) { return _Structs.Contract.RecoverSender(&_Structs.CallOpts, txData) } -// RecoverSender is a free data retrieval call binding the contract method 0x23bc02dd. +// RecoverSender is a free data retrieval call binding the contract method 0x0cb57856. // -// Solidity: function recoverSender((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[]) txData) pure returns(address sender) +// Solidity: function recoverSender((uint8,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256) txData) pure returns(address sender) func (_Structs *StructsCallerSession) RecoverSender(txData StructsTransaction) (common.Address, error) { return _Structs.Contract.RecoverSender(&_Structs.CallOpts, txData) } diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index be9ec726be..89f3f8a066 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x6080604052346200002e576200001e62000018620000d1565b620000f4565b604051603f620003818239603f90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b038116036200002e57565b90505190620000888262000099565b906020828203126200002e576200009691620000ab565b62000096620030e780380380620000e88162000071565b928339810190620000ba565b620000889062000164565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b62000096906200010b565b620000969062000121565b620001536200014d620000969263ffffffff1690565b60e01b90565b6001600160e01b03191690565b0190565b6040516117f781016001600160401b038111828210176200006b576200019182916117f7620018f0843990565b03906000f080156200028d576200020d916200020760049262000201620001bc63485cc95562000137565b620001f13386620001cc60405190565b98899460208601908152016001600160a01b0391821681529116602082015260400190565b6020820181038252038562000049565b6200012c565b62000335565b620002887fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69916200023d60405190565b9182918260408082526014908201527f5472616e73616374696f6e73416e616c797a657200000000000000000000000060608201526001600160a01b03909116602082015260800190565b0390a1565b620000ff565b60005b838110620002a75750506000910152565b818101518382015260200162000296565b620002dd620002e76020936200016093620002d1815190565b80835293849260200190565b9586910162000293565b601f01601f191690565b620003276200009694929362000317606084019560008501906001600160a01b03169052565b6001600160a01b03166020830152565b6040818403910152620002b8565b90604051926115308401916001600160401b038311858410176200006b5784936200036993611530620003c08739620002f1565b03906000f080156200028d5762000096906200012c56fe6080604052600080fdfea2646970667358221220acd5780e806f3c3a965a700694c9f3fce1db6b472e7cb32e15c84b7d8243d01f64736f6c6343000814003360a060405262000019620000126200019f565b91620001ff565b6040516105e762000681823960805181603001526105e790f35b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b03811603620000ab57565b600080fd5b90505190620000888262000099565b6001600160401b0381116200006b57602090601f01601f19160190565b60005b838110620000f05750506000910152565b8181015183820152602001620000df565b909291926200011a6200011482620000bf565b62000071565b93818552602085019082840111620000ab576200008892620000dc565b9080601f83011215620000ab578151620000969260200162000101565b91606083830312620000ab576200016c8284620000b0565b926200017c8360208301620000b0565b60408201519093906001600160401b038111620000ab5762000096920162000137565b620001c26200153080380380620001b68162000071565b92833981019062000154565b909192565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b6200009690620001d3565b6200009690620001e9565b916200020c919262000288565b604051906108c882016001600160401b038111838210176200006b5782916200024b916108c862000c6885396001600160a01b03909116815260200190565b03906000f0801562000282576200026290620001f4565b608052620000886200027c6080516001600160a01b031690565b62000406565b620001c7565b906200008891620002a4565b6200009662000096620000969290565b90620002b08262000381565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b620002dc83620001f4565b90620002e760405190565b600090a2805162000301620002fd600062000294565b9190565b111562000316576200031391620005a5565b50565b50506200008862000543565b620000967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc62000294565b9062000361620000966200037d92620001f4565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6000813b62000394620002fd8362000294565b14620003b557906200008891620003ae6200009662000322565b016200034d565b620003e882620003c460405190565b634c9c8ce360e01b8152918291600483016001600160a01b03909116815260200190565b0390fd5b6001600160a01b0391821681529116602082015260400190565b6200008890620004156200049b565b817f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91620004506200044660405190565b92839283620003ec565b0390a1620004d1565b620000967fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610362000294565b62000096906200008a565b62000096905462000484565b620000966000620004af6200009662000459565b016200048f565b6200008a62000096620000969290565b6200009690620004b6565b90600091620004e083620004c6565b926001600160a01b0384166001600160a01b03831614620005105762000088929350620003ae6200009662000459565b620003e8846200051f60405190565b633173bdd160e11b8152918291600483016001600160a01b03909116815260200190565b3462000554620002fd600062000294565b116200055c57565b60405163b398979f60e01b8152600490fd5b906200057e6200011483620000bf565b918252565b3d15620005a057620005953d6200056e565b903d6000602084013e565b606090565b6000806200009693620005b6606090565b50805190602001845af4620005ca62000583565b9190620005d857506200064d565b8151600090620005ec620002fd8362000294565b14908162000632575b50620005ff575090565b620003e8906200060e60405190565b639996b31560e01b8152918291600483016001600160a01b03909116815260200190565b905062000645620002fd833b9262000294565b1438620005f5565b80516200065f620002fd600062000294565b11156200066e57805190602001fd5b604051630a12f52160e11b8152600490fdfe608060405261000c61000e565b005b610016610027565b565b6001600160a01b031690565b90565b336100616100547f0000000000000000000000000000000000000000000000000000000000000000610018565b916001600160a01b031690565b036100e8577f4f1ef286000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060003516146100e0576040517fd2b576ec000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b6100166102ed565b6100f06100f5565b610156565b610024610140565b6100246100246100249290565b6100247f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6100fd565b546001600160a01b031690565b610024600061015061002461010a565b01610133565b60008091368280378136915af43d6000803e15610172573d6000f35b3d6000fd5b9093929384831161018f57841161018f578101920390565b600080fd5b6001600160a01b0381160361018f57565b9050359061001682610194565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761020357604052565b6101b2565b9061001661021560405190565b92836101e1565b67ffffffffffffffff811161020357602090601f01601f19160190565b90826000939282370152565b9092919261025a6102558261021c565b610208565b9381855260208501908284011161018f5761001692610239565b9080601f8301121561018f5781602061002493359101610245565b91909160408184031261018f576102a683826101a5565b92602082013567ffffffffffffffff811161018f576100249201610274565b610018610024610024926001600160a01b031690565b610024906102c5565b610024906102db565b61001661032361031c6103146103103660008161030a60046100fd565b91610177565b9091565b81019061028f565b91906102e4565b9061032d826103ef565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b610357836102e4565b9061036160405190565b600090a2805161037861037460006100fd565b9190565b111561038a57610387916104c7565b50565b5050610016610456565b6001600160a01b03909116815260200190565b906103b76100246103eb926102e4565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000813b6103ff610374836100fd565b1461041a57906100169161041461002461010a565b016103a7565b6100dc8261042760405190565b9182917f4c9c8ce300000000000000000000000000000000000000000000000000000000835260048301610394565b3461046461037460006100fd565b1161046b57565b6040517fb398979f000000000000000000000000000000000000000000000000000000008152600490fd5b906104a36102558361021c565b918252565b3d156104c2576104b73d610496565b903d6000602084013e565b606090565b600080610024936104d6606090565b50805190602001845af46104e86104a8565b91906104f45750610569565b8151600090610505610374836100fd565b149081610552575b50610516575090565b6100dc9061052360405190565b9182917f9996b31500000000000000000000000000000000000000000000000000000000835260048301610394565b9050610562610374833b926100fd565b143861050d565b805161057861037460006100fd565b111561058657805190602001fd5b6040517f1425ea42000000000000000000000000000000000000000000000000000000008152600490fdfea2646970667358221220782f2801dba6b92d163f770087c095f4a3bcf48f3a41dbeafc28edfa481d940f64736f6c6343000814003360806040523462000030576200001e62000018620000d3565b620000f6565b60405161066362000265823961066390f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003057565b905051906200008a826200009b565b9060208282031262000030576200009891620000ad565b62000098620008c880380380620000ea8162000073565b928339810190620000bc565b6200008a906200012f565b6200008c62000098620000989290565b620000989062000101565b6001600160a01b03909116815260200190565b6200013b600062000111565b6001600160a01b0381166001600160a01b038316146200016157506200008a9062000202565b62000187906200017060405190565b631e4fbdf760e01b8152918291600483016200011c565b0390fd5b62000098906200008c565b6200009890546200018b565b62000098906200008c906001600160a01b031682565b6200009890620001a2565b6200009890620001b8565b90620001e262000098620001fe92620001c3565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200020e600062000196565b906200021c816000620001ce565b620002536200024c7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620001c3565b91620001c3565b916200025e60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063715018a6146100625780638da5cb5b1461005d5780639623609d14610058578063ad3cb1cc146100535763f2fde38b036100725761035a565b61031f565b610246565b6100a9565b610077565b600091031261007257565b600080fd5b3461007257610087366004610067565b61008f6103aa565b604051005b0390f35b6001600160a01b031690565b90565b565b34610072576100b9366004610067565b6100946100ce6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b6001600160a01b0381165b0361007257565b905035906100a7826100e8565b6001600160a01b0381166100f3565b905035906100a782610107565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761017457604052565b610123565b906100a761018660405190565b9283610152565b67ffffffffffffffff811161017457602090601f01601f19160190565b0190565b90826000939282370152565b909291926101cf6101ca8261018d565b610179565b93818552602085019082840111610072576100a7926101ae565b9080601f83011215610072578160206100a4933591016101ba565b916060838303126100725761021982846100fa565b926102278360208301610116565b92604082013567ffffffffffffffff8111610072576100a492016101e9565b61008f610254366004610204565b91610622565b906102676101ca8361018d565b918252565b610276600561025a565b7f352e302e30000000000000000000000000000000000000000000000000000000602082015290565b6100a461026c565b6100a461029f565b6100a46102a7565b60005b8381106102ca5750506000910152565b81810151838201526020016102ba565b6102fb6103046020936101aa936102ef815190565b80835293849260200190565b958691016102b7565b601f01601f191690565b60208082526100a4929101906102da565b346100725761032f366004610067565b61009461033a6102af565b6040519182918261030e565b90602082820312610072576100a491610116565b346100725761008f61036d366004610346565b61049b565b61037a6103b2565b6100a7610398565b6100986100a46100a49290565b6100a490610382565b6100a76103a5600061038f565b610514565b6100a7610372565b60005433906001600160a01b03168190036103ca5750565b610414906103d760405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6100a7906104246103b2565b61042e600061038f565b6001600160a01b0381166001600160a01b0383161461045157506100a790610514565b6104149061045e60405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6100a790610418565b6100986100a46100a4926001600160a01b031690565b6100a4906104a4565b6100a4906104ba565b906104dc6100a4610510926104c3565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000546001600160a01b03169061052c8160006104cc565b61055f6105597f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104c3565b916104c3565b9161056960405190565b600090a3565b906100a7929161057d6103b2565b6105b1565b6001600160a01b0390911681526100a491604082019160208184039101526102da565b6040513d6000823e3d90fd5b6105ba906104c3565b349190634f1ef286813b15610072576000936105e9916105f46105dc60405190565b9788968795869460e01b90565b845260048401610582565b03925af1801561061d576106055750565b6100a79060006106158183610152565b810190610067565b6105a5565b906100a7929161056f56fea26469706673582212205d5f75a536a5fd2f2e441550c1d5a4e715b6cff79e1cc29a86c7abd4b441f65364736f6c6343000814003360806040523461001a576040516117d761002082396117d790f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146100d2578063248a9ca3146100cd5780632f2ff15d146100c857806336568abe146100c3578063485cc955146100be578063508a50f4146100b95780635f03a661146100b457806391d14854146100af5780639dbbcf8e146100aa578063a217fddf146100a5578063d547741f146100a05763ee546fd803610102576103b5565b610388565b61036d565b610336565b6102e6565b6102ad565b610274565b610250565b61021d565b6101ff565b610189565b610131565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361010257565b600080fd5b90503590610114826100d7565b565b906020828203126101025761012a91610107565b90565b9052565b346101025761015e61014c610147366004610116565b6103cd565b60405191829182901515815260200190565b0390f35b806100fb565b9050359061011482610162565b906020828203126101025761012a91610168565b346101025761015e6101a461019f366004610175565b6104f0565b6040519182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166100fb565b90503590610114826101c0565b91906040838203126101025761012a906101f68185610168565b936020016101cf565b34610102576102186102123660046101dc565b90610532565b604051005b34610102576102186102303660046101dc565b906105e2565b91906040838203126101025761012a906101f681856101cf565b3461010257610218610263366004610236565b906109d3565b600091031261010257565b3461010257610284366004610269565b61015e7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5986101a4565b34610102576102bd366004610269565b61015e7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db6101a4565b346101025761015e61014c6102fc3660046101dc565b906104c0565b908160209103126101025790565b9060208282031261010257813567ffffffffffffffff81116101025761012a9201610302565b3461010257610218610349366004610310565b61108f565b61012a61012a61012a9290565b61012a600061034e565b61012a61035b565b346101025761037d366004610269565b61015e6101a4610365565b346101025761021861039b3660046101dc565b906105d8565b906020828203126101025761012a916101cf565b34610102576102186103c83660046103a1565b610a9c565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082161490811561041d575090565b61012a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101b461012a61012a926001600160a01b031690565b61012a90610479565b61012a9061048f565b9061046b90610498565b61012a905b60ff1690565b61012a90546104ab565b61012a916104da916104d460009182610469565b016104a1565b6104b6565b61012a9081565b61012a90546104df565b600161050961012a92610501600090565b506000610469565b016104e6565b9061011491610525610520826104f0565b61053c565b9061052f91610659565b50565b906101149161050f565b610114903390610564565b6001600160a01b0390911681526040810192916101149160200152565b9061057661057282846104c0565b1590565b61057e575050565b6105b961058a60405190565b9283927fe2517d3f00000000000000000000000000000000000000000000000000000000845260048401610547565b0390fd5b90610114916105ce610520826104f0565b9061052f916106d5565b90610114916105bd565b906105ec336101b4565b6001600160a01b038216036106045761052f916106d5565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061064e61012a61065592151590565b825461062f565b9055565b61066661057283836104c0565b156106ce57600191610687836106828360006104d48782610469565b61063e565b33906106bd6106b76106b77f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b92610498565b926106c760405190565b600090a490565b5050600090565b906106e081836104c0565b156106ce576106f9600061068283826104d48782610469565b33906107296106b76106b77ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261073360405190565b600090a4600190565b61012a9060401c6104b0565b61012a905461073c565b61012a905b67ffffffffffffffff1690565b61012a9054610752565b61075761012a61012a9290565b9067ffffffffffffffff90610634565b61075761012a61012a9267ffffffffffffffff1690565b906107b261012a6106559261078b565b825461077b565b9068ff00000000000000009060401b610634565b906107dd61012a61065592151590565b82546107b9565b61012d9061076e565b60208101929161011491906107e4565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00908161083661083061057283610748565b91610764565b936000926108438461076e565b67ffffffffffffffff87161480610965575b6001966108726108648961076e565b9167ffffffffffffffff1690565b14908161093d575b155b9081610934575b50610909576108ac91836108a38661089a8a61076e565b980197886107a2565b6108fa5761096c565b6108b557505050565b6108be916107cd565b6108f57fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916108ec60405190565b918291826107ed565b0390a1565b61090487876107cd565b61096c565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b15905038610883565b905061087c61094b30610498565b3b61095c6109588861034e565b9190565b1491905061087a565b5082610855565b906109ac61052f926109858161098061035b565b610659565b507ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598610659565b507f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610659565b90610114916107fd565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8054821015610a2c57610a23600191600052602060002090565b91020190600090565b6109f3565b91906008610634910291610a4b6001600160a01b03841b90565b921b90565b9190610a6161012a61065593610498565b908354610a31565b9081549168010000000000000000831015610a975782610a9191600161011495018155610a09565b90610a50565b6109dd565b61011490610aab600191610498565b90610a69565b61011490610ade7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db61053c565b610f1e565b903590601e193682900301821215610102570180359067ffffffffffffffff82116101025760200191602082023603831361010257565b90601f01601f1916810190811067ffffffffffffffff821117610a9757604052565b90610114610b4960405190565b9283610b1a565b67ffffffffffffffff8111610a975760208091020190565b90610b7a610b7583610b50565b610b3c565b918252565b61012a6101c0610b3c565b60209081808080808080808080808080610ba2610b7f565b9e8f60008152016000815201600081520160008152016000815201600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b61012a610b8a565b60005b828110610c0357505050565b602090610c0e610bec565b8184015201610bf7565b90610114610c2e610c2884610b68565b93610b50565b601f190160208401610bf4565b634e487b7160e01b600052601160045260246000fd5b6000198114610c605760010190565b610c3b565b903590601e193682900301821215610102570180359067ffffffffffffffff8211610102576020019136829003831361010257565b90821015610a2c576020610cb19202810190610c65565b9091565b90610cbe825190565b811015610a2c576020809102010190565b61012a916008021c6101b4565b9061012a9154610ccf565b60005b838110610cfa5750506000910152565b8181015183820152602001610cea565b610d2b610d34602093610d3e93610d1f815190565b80835293849260200190565b95869101610ce7565b601f01601f191690565b0190565b90610d62610d5b610d51845190565b8084529260200190565b9260200190565b9060005b818110610d735750505090565b909192610d99610d9260019286516001600160a01b0316815260200190565b9460200190565b929101610d66565b805160ff16825261012a916101a0610e276101c08301610dc660208601516020860152565b610dd560408601516040860152565b610de460608601516060860152565b610df360808601516080860152565b60a0858101516001600160a01b031690850152610e1560c086015160c0860152565b60e085015184820360e0860152610d0a565b6101008085015160ff169084015292610e47610120820151610120850152565b610e58610140820151610140850152565b610e69610160820151610160850152565b610e7a610180820151610180850152565b0151906101a0818403910152610d42565b9061012a91610da1565b90610eab610ea1835190565b8083529160200190565b9081610ebd6020830284019460200190565b926000915b838310610ed157505050505090565b90919293946020610ef4610eed83856001950387528951610e8b565b9760200190565b9301930191939290610ec2565b602080825261012a92910190610e95565b6040513d6000823e3d90fd5b610f30610f2b8280610ae3565b905090565b90600091610f406109588461034e565b1461108b5781810190610f5e610f59610f2b8484610ae3565b610c18565b93610f688461034e565b610f7861012a610f2b8686610ae3565b811015610fc05780610fa0610f9a610fbb93610f948888610ae3565b90610c9a565b9061111a565b610faa8289610cb5565b52610fb58188610cb5565b50610c51565b610f68565b5092915050610fce8161034e565b6001610fdb61012a825490565b82101561108457610ff8610ff283610ffd93610a09565b90610cdc565b610498565b9063630ac52c91803b156101025761102392849161101a60405190565b94859260e01b90565b82528183816110358b60048301610f01565b03925af191821561107f5761104e926110535750610c51565b610fce565b61107290843d8611611078575b61106a8183610b1a565b810190610269565b38610fb5565b503d611060565b610f12565b5050509050565b5050565b61011490610ab1565b1561109f57565b60405162461bcd60e51b815260206004820152601660248201527f456d707479207472616e73616374696f6e2064617461000000000000000000006044820152606490fd5b9190811015610a2c570190565b6104b061012a61012a9260ff1690565b61012a9060f81c6110f1565b6104b061012a61012a9290565b90611123610bec565b50600061113c826111366109588461034e565b11611098565b61118961118361117e6111586111518561034e565b86886110e4565b357fff000000000000000000000000000000000000000000000000000000000000001690565b611101565b9161110d565b60ff82160361119c575061012a9161133d565b6111a6600161110d565b60ff8216036111b9575061012a91611533565b6111cd6111c6600261110d565b9160ff1690565b036111db5761012a916116e0565b60405162461bcd60e51b815260206004820152601c60248201527f556e737570706f72746564207472616e73616374696f6e2074797065000000006044820152606490fd5b67ffffffffffffffff8111610a9757602090601f01601f19160190565b90826000939282370152565b90929192611259610b7582611220565b93818552602085019082840111610102576101149261123d565b9080601f830112156101025781602061012a93359101611249565b60ff81166100fb565b905035906101148261128e565b909161012082840312610102576112bb8383610168565b926112c98160208501610168565b926112d78260408301610168565b926112e583606084016101cf565b926112f38160808501610168565b9260a081013567ffffffffffffffff81116101025782611314918301611273565b9261012a6113258460c08501611297565b936113338160e08601610168565b9361010001610168565b906113dc6113cd6113cd610ff861012a94611356610bec565b506113cd611387611365610bec565b98899361137f60006113768161110d565b60ff1690870152565b8101906112a4565b94929c95979d939060408b9c93989c019d60608c019b6113d8608082019a60a08301996113d060c085019660e08601956113cd6101008201946101406101208401930152565b52565b9060ff169052565b5252565b6001600160a01b03169052565b90939293848311610102578411610102578101920390565b90929192611411610b7582610b50565b938185526020808601920283019281841161010257915b8383106114355750505050565b6020809161144384866101cf565b815201920191611428565b9080601f830112156101025781602061012a93359101611401565b919061016083820312610102576114808184610168565b9261148e8260208301610168565b9261149c8360408401610168565b926114aa8160608501610168565b926114b882608083016101cf565b926114c68360a08401610168565b9260c083013567ffffffffffffffff811161010257816114e7918501611273565b9260e081013567ffffffffffffffff8111610102578261150891830161144e565b9261012a61151a846101008501611297565b93611529816101208601610168565b9361014001610168565b61153b610bec565b50611544610bec565b918060016115518161110d565b60ff16855261155f9061034e565b90611569936113e9565b810161157491611469565b9160208c9b9a989497929599969b019a60408d01998d6060810199608082019860a083019760c084019660e08501946101a081019361010082019361012083019261014001906115c19152565b6115c89152565b60ff16905252526115d69152565b6115df90610498565b6001600160a01b031690525b6115f29152565b6115f99152565b6116009152565b61012a9152565b9091610180828403126101025761161e8383610168565b9261162c8160208501610168565b9261163a8260408301610168565b926116488360608401610168565b926116568160808501610168565b926116648260a083016101cf565b926116728360c08401610168565b9260e083013567ffffffffffffffff81116101025781611693918501611273565b9261010081013567ffffffffffffffff811161010257826116b591830161144e565b9261012a6116c7846101208501611297565b936116d6816101408601610168565b9361016001610168565b906116e9610bec565b506116f2610bec565b9182916116ff600261110d565b60ff1683528061170f600161034e565b90611719936113e9565b810161172491611607565b6101408d015260208c019b604081019a99610160820199909861018083019891976080840197919660a0850196939560c0860195929460e08401936101a08101926101008201929161012001906117789152565b60ff16905252526117869152565b61178f90610498565b6001600160a01b031690526115eb915256fea264697066735822122099174bb56ff39995f0954e5f91decdef97f1bafdd9c244081520abf688b7efe764736f6c63430008140033", + Bin: "0x6080604052346200002e576200001e62000018620000d1565b620000f4565b604051603f620003818239603f90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b038116036200002e57565b90505190620000888262000099565b906020828203126200002e576200009691620000ab565b620000966200285580380380620000e88162000071565b928339810190620000ba565b620000889062000164565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b62000096906200010b565b620000969062000121565b620001536200014d620000969263ffffffff1690565b60e01b90565b6001600160e01b03191690565b0190565b604051610f6581016001600160401b038111828210176200006b57620001918291610f65620018f0843990565b03906000f080156200028d576200020d916200020760049262000201620001bc63485cc95562000137565b620001f13386620001cc60405190565b98899460208601908152016001600160a01b0391821681529116602082015260400190565b6020820181038252038562000049565b6200012c565b62000335565b620002887fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69916200023d60405190565b9182918260408082526014908201527f5472616e73616374696f6e73416e616c797a657200000000000000000000000060608201526001600160a01b03909116602082015260800190565b0390a1565b620000ff565b60005b838110620002a75750506000910152565b818101518382015260200162000296565b620002dd620002e76020936200016093620002d1815190565b80835293849260200190565b9586910162000293565b601f01601f191690565b620003276200009694929362000317606084019560008501906001600160a01b03169052565b6001600160a01b03166020830152565b6040818403910152620002b8565b90604051926115308401916001600160401b038311858410176200006b5784936200036993611530620003c08739620002f1565b03906000f080156200028d5762000096906200012c56fe6080604052600080fdfea26469706673582212206f83aeb0682bc5bc65354d3fe229ff3803d66fed38ec8d9ee0eb3b9865c0862964736f6c6343000814003360a060405262000019620000126200019f565b91620001ff565b6040516105e762000681823960805181603001526105e790f35b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b03811603620000ab57565b600080fd5b90505190620000888262000099565b6001600160401b0381116200006b57602090601f01601f19160190565b60005b838110620000f05750506000910152565b8181015183820152602001620000df565b909291926200011a6200011482620000bf565b62000071565b93818552602085019082840111620000ab576200008892620000dc565b9080601f83011215620000ab578151620000969260200162000101565b91606083830312620000ab576200016c8284620000b0565b926200017c8360208301620000b0565b60408201519093906001600160401b038111620000ab5762000096920162000137565b620001c26200153080380380620001b68162000071565b92833981019062000154565b909192565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b6200009690620001d3565b6200009690620001e9565b916200020c919262000288565b604051906108c882016001600160401b038111838210176200006b5782916200024b916108c862000c6885396001600160a01b03909116815260200190565b03906000f0801562000282576200026290620001f4565b608052620000886200027c6080516001600160a01b031690565b62000406565b620001c7565b906200008891620002a4565b6200009662000096620000969290565b90620002b08262000381565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b620002dc83620001f4565b90620002e760405190565b600090a2805162000301620002fd600062000294565b9190565b111562000316576200031391620005a5565b50565b50506200008862000543565b620000967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc62000294565b9062000361620000966200037d92620001f4565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6000813b62000394620002fd8362000294565b14620003b557906200008891620003ae6200009662000322565b016200034d565b620003e882620003c460405190565b634c9c8ce360e01b8152918291600483016001600160a01b03909116815260200190565b0390fd5b6001600160a01b0391821681529116602082015260400190565b6200008890620004156200049b565b817f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91620004506200044660405190565b92839283620003ec565b0390a1620004d1565b620000967fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610362000294565b62000096906200008a565b62000096905462000484565b620000966000620004af6200009662000459565b016200048f565b6200008a62000096620000969290565b6200009690620004b6565b90600091620004e083620004c6565b926001600160a01b0384166001600160a01b03831614620005105762000088929350620003ae6200009662000459565b620003e8846200051f60405190565b633173bdd160e11b8152918291600483016001600160a01b03909116815260200190565b3462000554620002fd600062000294565b116200055c57565b60405163b398979f60e01b8152600490fd5b906200057e6200011483620000bf565b918252565b3d15620005a057620005953d6200056e565b903d6000602084013e565b606090565b6000806200009693620005b6606090565b50805190602001845af4620005ca62000583565b9190620005d857506200064d565b8151600090620005ec620002fd8362000294565b14908162000632575b50620005ff575090565b620003e8906200060e60405190565b639996b31560e01b8152918291600483016001600160a01b03909116815260200190565b905062000645620002fd833b9262000294565b1438620005f5565b80516200065f620002fd600062000294565b11156200066e57805190602001fd5b604051630a12f52160e11b8152600490fdfe608060405261000c61000e565b005b610016610027565b565b6001600160a01b031690565b90565b336100616100547f0000000000000000000000000000000000000000000000000000000000000000610018565b916001600160a01b031690565b036100e8577f4f1ef286000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060003516146100e0576040517fd2b576ec000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b6100166102ed565b6100f06100f5565b610156565b610024610140565b6100246100246100249290565b6100247f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6100fd565b546001600160a01b031690565b610024600061015061002461010a565b01610133565b60008091368280378136915af43d6000803e15610172573d6000f35b3d6000fd5b9093929384831161018f57841161018f578101920390565b600080fd5b6001600160a01b0381160361018f57565b9050359061001682610194565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761020357604052565b6101b2565b9061001661021560405190565b92836101e1565b67ffffffffffffffff811161020357602090601f01601f19160190565b90826000939282370152565b9092919261025a6102558261021c565b610208565b9381855260208501908284011161018f5761001692610239565b9080601f8301121561018f5781602061002493359101610245565b91909160408184031261018f576102a683826101a5565b92602082013567ffffffffffffffff811161018f576100249201610274565b610018610024610024926001600160a01b031690565b610024906102c5565b610024906102db565b61001661032361031c6103146103103660008161030a60046100fd565b91610177565b9091565b81019061028f565b91906102e4565b9061032d826103ef565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b610357836102e4565b9061036160405190565b600090a2805161037861037460006100fd565b9190565b111561038a57610387916104c7565b50565b5050610016610456565b6001600160a01b03909116815260200190565b906103b76100246103eb926102e4565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000813b6103ff610374836100fd565b1461041a57906100169161041461002461010a565b016103a7565b6100dc8261042760405190565b9182917f4c9c8ce300000000000000000000000000000000000000000000000000000000835260048301610394565b3461046461037460006100fd565b1161046b57565b6040517fb398979f000000000000000000000000000000000000000000000000000000008152600490fd5b906104a36102558361021c565b918252565b3d156104c2576104b73d610496565b903d6000602084013e565b606090565b600080610024936104d6606090565b50805190602001845af46104e86104a8565b91906104f45750610569565b8151600090610505610374836100fd565b149081610552575b50610516575090565b6100dc9061052360405190565b9182917f9996b31500000000000000000000000000000000000000000000000000000000835260048301610394565b9050610562610374833b926100fd565b143861050d565b805161057861037460006100fd565b111561058657805190602001fd5b6040517f1425ea42000000000000000000000000000000000000000000000000000000008152600490fdfea2646970667358221220782f2801dba6b92d163f770087c095f4a3bcf48f3a41dbeafc28edfa481d940f64736f6c6343000814003360806040523462000030576200001e62000018620000d3565b620000f6565b60405161066362000265823961066390f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003057565b905051906200008a826200009b565b9060208282031262000030576200009891620000ad565b62000098620008c880380380620000ea8162000073565b928339810190620000bc565b6200008a906200012f565b6200008c62000098620000989290565b620000989062000101565b6001600160a01b03909116815260200190565b6200013b600062000111565b6001600160a01b0381166001600160a01b038316146200016157506200008a9062000202565b62000187906200017060405190565b631e4fbdf760e01b8152918291600483016200011c565b0390fd5b62000098906200008c565b6200009890546200018b565b62000098906200008c906001600160a01b031682565b6200009890620001a2565b6200009890620001b8565b90620001e262000098620001fe92620001c3565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200020e600062000196565b906200021c816000620001ce565b620002536200024c7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620001c3565b91620001c3565b916200025e60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063715018a6146100625780638da5cb5b1461005d5780639623609d14610058578063ad3cb1cc146100535763f2fde38b036100725761035a565b61031f565b610246565b6100a9565b610077565b600091031261007257565b600080fd5b3461007257610087366004610067565b61008f6103aa565b604051005b0390f35b6001600160a01b031690565b90565b565b34610072576100b9366004610067565b6100946100ce6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b6001600160a01b0381165b0361007257565b905035906100a7826100e8565b6001600160a01b0381166100f3565b905035906100a782610107565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761017457604052565b610123565b906100a761018660405190565b9283610152565b67ffffffffffffffff811161017457602090601f01601f19160190565b0190565b90826000939282370152565b909291926101cf6101ca8261018d565b610179565b93818552602085019082840111610072576100a7926101ae565b9080601f83011215610072578160206100a4933591016101ba565b916060838303126100725761021982846100fa565b926102278360208301610116565b92604082013567ffffffffffffffff8111610072576100a492016101e9565b61008f610254366004610204565b91610622565b906102676101ca8361018d565b918252565b610276600561025a565b7f352e302e30000000000000000000000000000000000000000000000000000000602082015290565b6100a461026c565b6100a461029f565b6100a46102a7565b60005b8381106102ca5750506000910152565b81810151838201526020016102ba565b6102fb6103046020936101aa936102ef815190565b80835293849260200190565b958691016102b7565b601f01601f191690565b60208082526100a4929101906102da565b346100725761032f366004610067565b61009461033a6102af565b6040519182918261030e565b90602082820312610072576100a491610116565b346100725761008f61036d366004610346565b61049b565b61037a6103b2565b6100a7610398565b6100986100a46100a49290565b6100a490610382565b6100a76103a5600061038f565b610514565b6100a7610372565b60005433906001600160a01b03168190036103ca5750565b610414906103d760405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6100a7906104246103b2565b61042e600061038f565b6001600160a01b0381166001600160a01b0383161461045157506100a790610514565b6104149061045e60405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6100a790610418565b6100986100a46100a4926001600160a01b031690565b6100a4906104a4565b6100a4906104ba565b906104dc6100a4610510926104c3565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000546001600160a01b03169061052c8160006104cc565b61055f6105597f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104c3565b916104c3565b9161056960405190565b600090a3565b906100a7929161057d6103b2565b6105b1565b6001600160a01b0390911681526100a491604082019160208184039101526102da565b6040513d6000823e3d90fd5b6105ba906104c3565b349190634f1ef286813b15610072576000936105e9916105f46105dc60405190565b9788968795869460e01b90565b845260048401610582565b03925af1801561061d576106055750565b6100a79060006106158183610152565b810190610067565b6105a5565b906100a7929161056f56fea26469706673582212205d5f75a536a5fd2f2e441550c1d5a4e715b6cff79e1cc29a86c7abd4b441f65364736f6c6343000814003360806040523461001a57604051610f456100208239610f4590f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146100d2578063248a9ca3146100cd5780632f2ff15d146100c857806336568abe146100c3578063485cc955146100be5780634a44e6c1146100b9578063508a50f4146100b45780635f03a661146100af57806391d14854146100aa578063a217fddf146100a5578063d547741f146100a05763ee546fd803610102576103dd565b6103b0565b610395565b61035a565b610321565b6102e8565b6102c4565b610251565b61021e565b610200565b610189565b610131565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361010257565b600080fd5b90503590610114826100d7565b565b906020828203126101025761012a91610107565b90565b9052565b346101025761015e61014c610147366004610116565b6103f5565b60405191829182901515815260200190565b0390f35b806100fb565b9050359061011482610162565b906020828203126101025761012a91610168565b346101025761015e6101a461019f366004610175565b610518565b6040515b9182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166100fb565b90503590610114826101c1565b91906040838203126101025761012a906101f78185610168565b936020016101d0565b34610102576102196102133660046101dd565b9061055a565b604051005b34610102576102196102313660046101dd565b9061060a565b91906040838203126101025761012a906101f781856101d0565b3461010257610219610264366004610237565b906109fb565b909182601f830112156101025781359167ffffffffffffffff831161010257602001926020830284011161010257565b9060208282031261010257813567ffffffffffffffff8111610102576102c0920161026a565b9091565b34610102576102196102d736600461029a565b90610f05565b600091031261010257565b34610102576102f83660046102dd565b61015e7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5986101a4565b34610102576103313660046102dd565b61015e7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db6101a4565b346101025761015e61014c6103703660046101dd565b906104e8565b61012a61012a61012a9290565b61012a6000610376565b61012a610383565b34610102576103a53660046102dd565b61015e6101a461038d565b34610102576102196103c33660046101dd565b90610600565b906020828203126101025761012a916101d0565b34610102576102196103f03660046103c9565b610ac4565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821614908115610445575090565b61012a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101b561012a61012a926001600160a01b031690565b61012a906104a1565b61012a906104b7565b90610493906104c0565b61012a905b60ff1690565b61012a90546104d3565b61012a91610502916104fc60009182610491565b016104c9565b6104de565b61012a9081565b61012a9054610507565b600161053161012a92610529600090565b506000610491565b0161050e565b906101149161054d61054882610518565b610564565b9061055791610681565b50565b9061011491610537565b61011490339061058c565b6001600160a01b0390911681526040810192916101149160200152565b9061059e61059a82846104e8565b1590565b6105a6575050565b6105e16105b260405190565b9283927fe2517d3f0000000000000000000000000000000000000000000000000000000084526004840161056f565b0390fd5b90610114916105f661054882610518565b90610557916106fd565b90610114916105e5565b90610614336101b5565b6001600160a01b0382160361062c57610557916106fd565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061067661012a61067d92151590565b8254610657565b9055565b61068e61059a83836104e8565b156106f6576001916106af836106aa8360006104fc8782610491565b610666565b33906106e56106df6106df7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b926104c0565b926106ef60405190565b600090a490565b5050600090565b9061070881836104e8565b156106f65761072160006106aa83826104fc8782610491565b33906107516106df6106df7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261075b60405190565b600090a4600190565b61012a9060401c6104d8565b61012a9054610764565b61012a905b67ffffffffffffffff1690565b61012a905461077a565b61077f61012a61012a9290565b9067ffffffffffffffff9061065c565b61077f61012a61012a9267ffffffffffffffff1690565b906107da61012a61067d926107b3565b82546107a3565b9068ff00000000000000009060401b61065c565b9061080561012a61067d92151590565b82546107e1565b61012d90610796565b602081019291610114919061080c565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00908161085e61085861059a83610770565b9161078c565b9360009261086b84610796565b67ffffffffffffffff8716148061098d575b60019661089a61088c89610796565b9167ffffffffffffffff1690565b149081610965575b155b908161095c575b50610931576108d491836108cb866108c28a610796565b980197886107ca565b61092257610994565b6108dd57505050565b6108e6916107f5565b61091d7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29161091460405190565b91829182610815565b0390a1565b61092c87876107f5565b610994565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b159050386108ab565b90506108a4610973306104c0565b3b61098461098088610376565b9190565b149190506108a2565b508261087d565b906109d4610557926109ad816109a8610383565b610681565b507ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598610681565b507f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610681565b9061011491610825565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8054821015610a5457610a4b600191600052602060002090565b91020190600090565b610a1b565b9190600861065c910291610a736001600160a01b03841b90565b921b90565b9190610a8961012a61067d936104c0565b908354610a59565b9081549168010000000000000000831015610abf5782610ab991600161011495018155610a31565b90610a78565b610a05565b61011490610ad36001916104c0565b90610a91565b6101149190610b077f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610564565b610d96565b0190565b634e487b7160e01b600052601160045260246000fd5b6000198114610b355760010190565b610b10565b61012a916008021c6101b5565b9061012a9154610b3a565b90601f01601f1916810190811067ffffffffffffffff821117610abf57604052565b60ff81166100fb565b9050359061011482610b74565b5061012a906020810190610b7d565b5061012a906020810190610168565b5061012a9060208101906101d0565b9035601e19368390030181121561010257016020813591019167ffffffffffffffff82116101025736829003831361010257565b90826000939282370152565b9190610c1581610c0e81610b0c9560209181520190565b8095610beb565b601f01601f191690565b9061012a9060e0610ce6610cdc6101008401610c45610c3e8880610b8a565b60ff168652565b610c5c610c556020890189610b99565b6020870152565b610c73610c6c6040890189610b99565b6040870152565b610c8a610c836060890189610b99565b6060870152565b610caa610c9a6080890189610ba8565b6001600160a01b03166080870152565b610cc1610cba60a0890189610b99565b60a0870152565b610cce60c0880188610bb7565b9086830360c0880152610bf7565b9482810190610ba8565b6001600160a01b0316910152565b9061012a91610c1f565b903560fe193683900301811215610102570190565b818352916020019081610d296020830284019490565b92836000925b848410610d3f5750505050505090565b9091929394956020610d6b610d648385600195038852610d5f8b88610cfe565b610cf4565b9860200190565b940194019294939190610d2f565b602080825261012a93910191610d13565b6040513d6000823e3d90fd5b90919060009083610da683610376565b8114610ea657610dda7f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41916101a860405190565b0390a1610de682610376565b6001610df361012a825490565b821015610e9e57610e10610e0a83610e1593610a31565b90610b47565b6104c0565b9063d90d786e91803b1561010257610e3b928591610e3260405190565b94859260e01b90565b8252818381610e4e8c8a60048401610d79565b03925af1918215610e9957610e6892610e6d575b50610b26565b610de6565b610e8c90853d8711610e92575b610e848183610b52565b8101906102dd565b38610e62565b503d610e7a565b610d8a565b505050509050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f207472616e73616374696f6e7320746f20636f6e766572740000000000006044820152606490fd5b9061011491610ad956fea2646970667358221220b67ba19c18a233d92d36e36ee5b48a1bbfdebb7ee33eda44400e9229076b658d64736f6c63430008140033", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go b/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go index bd3ba4f1b6..c33fe8877a 100644 --- a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go +++ b/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go @@ -29,15 +29,22 @@ var ( _ = abi.ConvertType ) -// TransactionsAnalyzerBlockTransactions is an auto generated low-level Go binding around an user-defined struct. -type TransactionsAnalyzerBlockTransactions struct { - Transactions [][]byte +// StructsTransaction is an auto generated low-level Go binding around an user-defined struct. +type StructsTransaction struct { + TxType uint8 + Nonce *big.Int + GasPrice *big.Int + GasLimit *big.Int + To common.Address + Value *big.Int + Data []byte + From common.Address } // TransactionsAnalyzerMetaData contains all meta data concerning the TransactionsAnalyzer contract. var TransactionsAnalyzerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes[]\",\"name\":\"transactions\",\"type\":\"bytes[]\"}],\"internalType\":\"structTransactionsAnalyzer.BlockTransactions\",\"name\":\"_block\",\"type\":\"tuple\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60806040523461001a576040516117d761002082396117d790f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146100d2578063248a9ca3146100cd5780632f2ff15d146100c857806336568abe146100c3578063485cc955146100be578063508a50f4146100b95780635f03a661146100b457806391d14854146100af5780639dbbcf8e146100aa578063a217fddf146100a5578063d547741f146100a05763ee546fd803610102576103b5565b610388565b61036d565b610336565b6102e6565b6102ad565b610274565b610250565b61021d565b6101ff565b610189565b610131565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361010257565b600080fd5b90503590610114826100d7565b565b906020828203126101025761012a91610107565b90565b9052565b346101025761015e61014c610147366004610116565b6103cd565b60405191829182901515815260200190565b0390f35b806100fb565b9050359061011482610162565b906020828203126101025761012a91610168565b346101025761015e6101a461019f366004610175565b6104f0565b6040519182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166100fb565b90503590610114826101c0565b91906040838203126101025761012a906101f68185610168565b936020016101cf565b34610102576102186102123660046101dc565b90610532565b604051005b34610102576102186102303660046101dc565b906105e2565b91906040838203126101025761012a906101f681856101cf565b3461010257610218610263366004610236565b906109d3565b600091031261010257565b3461010257610284366004610269565b61015e7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5986101a4565b34610102576102bd366004610269565b61015e7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db6101a4565b346101025761015e61014c6102fc3660046101dc565b906104c0565b908160209103126101025790565b9060208282031261010257813567ffffffffffffffff81116101025761012a9201610302565b3461010257610218610349366004610310565b61108f565b61012a61012a61012a9290565b61012a600061034e565b61012a61035b565b346101025761037d366004610269565b61015e6101a4610365565b346101025761021861039b3660046101dc565b906105d8565b906020828203126101025761012a916101cf565b34610102576102186103c83660046103a1565b610a9c565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082161490811561041d575090565b61012a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101b461012a61012a926001600160a01b031690565b61012a90610479565b61012a9061048f565b9061046b90610498565b61012a905b60ff1690565b61012a90546104ab565b61012a916104da916104d460009182610469565b016104a1565b6104b6565b61012a9081565b61012a90546104df565b600161050961012a92610501600090565b506000610469565b016104e6565b9061011491610525610520826104f0565b61053c565b9061052f91610659565b50565b906101149161050f565b610114903390610564565b6001600160a01b0390911681526040810192916101149160200152565b9061057661057282846104c0565b1590565b61057e575050565b6105b961058a60405190565b9283927fe2517d3f00000000000000000000000000000000000000000000000000000000845260048401610547565b0390fd5b90610114916105ce610520826104f0565b9061052f916106d5565b90610114916105bd565b906105ec336101b4565b6001600160a01b038216036106045761052f916106d5565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061064e61012a61065592151590565b825461062f565b9055565b61066661057283836104c0565b156106ce57600191610687836106828360006104d48782610469565b61063e565b33906106bd6106b76106b77f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b92610498565b926106c760405190565b600090a490565b5050600090565b906106e081836104c0565b156106ce576106f9600061068283826104d48782610469565b33906107296106b76106b77ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261073360405190565b600090a4600190565b61012a9060401c6104b0565b61012a905461073c565b61012a905b67ffffffffffffffff1690565b61012a9054610752565b61075761012a61012a9290565b9067ffffffffffffffff90610634565b61075761012a61012a9267ffffffffffffffff1690565b906107b261012a6106559261078b565b825461077b565b9068ff00000000000000009060401b610634565b906107dd61012a61065592151590565b82546107b9565b61012d9061076e565b60208101929161011491906107e4565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00908161083661083061057283610748565b91610764565b936000926108438461076e565b67ffffffffffffffff87161480610965575b6001966108726108648961076e565b9167ffffffffffffffff1690565b14908161093d575b155b9081610934575b50610909576108ac91836108a38661089a8a61076e565b980197886107a2565b6108fa5761096c565b6108b557505050565b6108be916107cd565b6108f57fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916108ec60405190565b918291826107ed565b0390a1565b61090487876107cd565b61096c565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b15905038610883565b905061087c61094b30610498565b3b61095c6109588861034e565b9190565b1491905061087a565b5082610855565b906109ac61052f926109858161098061035b565b610659565b507ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598610659565b507f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610659565b90610114916107fd565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8054821015610a2c57610a23600191600052602060002090565b91020190600090565b6109f3565b91906008610634910291610a4b6001600160a01b03841b90565b921b90565b9190610a6161012a61065593610498565b908354610a31565b9081549168010000000000000000831015610a975782610a9191600161011495018155610a09565b90610a50565b6109dd565b61011490610aab600191610498565b90610a69565b61011490610ade7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db61053c565b610f1e565b903590601e193682900301821215610102570180359067ffffffffffffffff82116101025760200191602082023603831361010257565b90601f01601f1916810190811067ffffffffffffffff821117610a9757604052565b90610114610b4960405190565b9283610b1a565b67ffffffffffffffff8111610a975760208091020190565b90610b7a610b7583610b50565b610b3c565b918252565b61012a6101c0610b3c565b60209081808080808080808080808080610ba2610b7f565b9e8f60008152016000815201600081520160008152016000815201600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b61012a610b8a565b60005b828110610c0357505050565b602090610c0e610bec565b8184015201610bf7565b90610114610c2e610c2884610b68565b93610b50565b601f190160208401610bf4565b634e487b7160e01b600052601160045260246000fd5b6000198114610c605760010190565b610c3b565b903590601e193682900301821215610102570180359067ffffffffffffffff8211610102576020019136829003831361010257565b90821015610a2c576020610cb19202810190610c65565b9091565b90610cbe825190565b811015610a2c576020809102010190565b61012a916008021c6101b4565b9061012a9154610ccf565b60005b838110610cfa5750506000910152565b8181015183820152602001610cea565b610d2b610d34602093610d3e93610d1f815190565b80835293849260200190565b95869101610ce7565b601f01601f191690565b0190565b90610d62610d5b610d51845190565b8084529260200190565b9260200190565b9060005b818110610d735750505090565b909192610d99610d9260019286516001600160a01b0316815260200190565b9460200190565b929101610d66565b805160ff16825261012a916101a0610e276101c08301610dc660208601516020860152565b610dd560408601516040860152565b610de460608601516060860152565b610df360808601516080860152565b60a0858101516001600160a01b031690850152610e1560c086015160c0860152565b60e085015184820360e0860152610d0a565b6101008085015160ff169084015292610e47610120820151610120850152565b610e58610140820151610140850152565b610e69610160820151610160850152565b610e7a610180820151610180850152565b0151906101a0818403910152610d42565b9061012a91610da1565b90610eab610ea1835190565b8083529160200190565b9081610ebd6020830284019460200190565b926000915b838310610ed157505050505090565b90919293946020610ef4610eed83856001950387528951610e8b565b9760200190565b9301930191939290610ec2565b602080825261012a92910190610e95565b6040513d6000823e3d90fd5b610f30610f2b8280610ae3565b905090565b90600091610f406109588461034e565b1461108b5781810190610f5e610f59610f2b8484610ae3565b610c18565b93610f688461034e565b610f7861012a610f2b8686610ae3565b811015610fc05780610fa0610f9a610fbb93610f948888610ae3565b90610c9a565b9061111a565b610faa8289610cb5565b52610fb58188610cb5565b50610c51565b610f68565b5092915050610fce8161034e565b6001610fdb61012a825490565b82101561108457610ff8610ff283610ffd93610a09565b90610cdc565b610498565b9063630ac52c91803b156101025761102392849161101a60405190565b94859260e01b90565b82528183816110358b60048301610f01565b03925af191821561107f5761104e926110535750610c51565b610fce565b61107290843d8611611078575b61106a8183610b1a565b810190610269565b38610fb5565b503d611060565b610f12565b5050509050565b5050565b61011490610ab1565b1561109f57565b60405162461bcd60e51b815260206004820152601660248201527f456d707479207472616e73616374696f6e2064617461000000000000000000006044820152606490fd5b9190811015610a2c570190565b6104b061012a61012a9260ff1690565b61012a9060f81c6110f1565b6104b061012a61012a9290565b90611123610bec565b50600061113c826111366109588461034e565b11611098565b61118961118361117e6111586111518561034e565b86886110e4565b357fff000000000000000000000000000000000000000000000000000000000000001690565b611101565b9161110d565b60ff82160361119c575061012a9161133d565b6111a6600161110d565b60ff8216036111b9575061012a91611533565b6111cd6111c6600261110d565b9160ff1690565b036111db5761012a916116e0565b60405162461bcd60e51b815260206004820152601c60248201527f556e737570706f72746564207472616e73616374696f6e2074797065000000006044820152606490fd5b67ffffffffffffffff8111610a9757602090601f01601f19160190565b90826000939282370152565b90929192611259610b7582611220565b93818552602085019082840111610102576101149261123d565b9080601f830112156101025781602061012a93359101611249565b60ff81166100fb565b905035906101148261128e565b909161012082840312610102576112bb8383610168565b926112c98160208501610168565b926112d78260408301610168565b926112e583606084016101cf565b926112f38160808501610168565b9260a081013567ffffffffffffffff81116101025782611314918301611273565b9261012a6113258460c08501611297565b936113338160e08601610168565b9361010001610168565b906113dc6113cd6113cd610ff861012a94611356610bec565b506113cd611387611365610bec565b98899361137f60006113768161110d565b60ff1690870152565b8101906112a4565b94929c95979d939060408b9c93989c019d60608c019b6113d8608082019a60a08301996113d060c085019660e08601956113cd6101008201946101406101208401930152565b52565b9060ff169052565b5252565b6001600160a01b03169052565b90939293848311610102578411610102578101920390565b90929192611411610b7582610b50565b938185526020808601920283019281841161010257915b8383106114355750505050565b6020809161144384866101cf565b815201920191611428565b9080601f830112156101025781602061012a93359101611401565b919061016083820312610102576114808184610168565b9261148e8260208301610168565b9261149c8360408401610168565b926114aa8160608501610168565b926114b882608083016101cf565b926114c68360a08401610168565b9260c083013567ffffffffffffffff811161010257816114e7918501611273565b9260e081013567ffffffffffffffff8111610102578261150891830161144e565b9261012a61151a846101008501611297565b93611529816101208601610168565b9361014001610168565b61153b610bec565b50611544610bec565b918060016115518161110d565b60ff16855261155f9061034e565b90611569936113e9565b810161157491611469565b9160208c9b9a989497929599969b019a60408d01998d6060810199608082019860a083019760c084019660e08501946101a081019361010082019361012083019261014001906115c19152565b6115c89152565b60ff16905252526115d69152565b6115df90610498565b6001600160a01b031690525b6115f29152565b6115f99152565b6116009152565b61012a9152565b9091610180828403126101025761161e8383610168565b9261162c8160208501610168565b9261163a8260408301610168565b926116488360608401610168565b926116568160808501610168565b926116648260a083016101cf565b926116728360c08401610168565b9260e083013567ffffffffffffffff81116101025781611693918501611273565b9261010081013567ffffffffffffffff811161010257826116b591830161144e565b9261012a6116c7846101208501611297565b936116d6816101408601610168565b9361016001610168565b906116e9610bec565b506116f2610bec565b9182916116ff600261110d565b60ff1683528061170f600161034e565b90611719936113e9565b810161172491611607565b6101408d015260208c019b604081019a99610160820199909861018083019891976080840197919660a0850196939560c0860195929460e08401936101a08101926101008201929161012001906117789152565b60ff16905252526117869152565b61178f90610498565b6001600160a01b031690526115eb915256fea264697066735822122099174bb56ff39995f0954e5f91decdef97f1bafdd9c244081520abf688b7efe764736f6c63430008140033", + ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionsLength\",\"type\":\"uint256\"}],\"name\":\"TransactionsConverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60806040523461001a57604051610f456100208239610f4590f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146100d2578063248a9ca3146100cd5780632f2ff15d146100c857806336568abe146100c3578063485cc955146100be5780634a44e6c1146100b9578063508a50f4146100b45780635f03a661146100af57806391d14854146100aa578063a217fddf146100a5578063d547741f146100a05763ee546fd803610102576103dd565b6103b0565b610395565b61035a565b610321565b6102e8565b6102c4565b610251565b61021e565b610200565b610189565b610131565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361010257565b600080fd5b90503590610114826100d7565b565b906020828203126101025761012a91610107565b90565b9052565b346101025761015e61014c610147366004610116565b6103f5565b60405191829182901515815260200190565b0390f35b806100fb565b9050359061011482610162565b906020828203126101025761012a91610168565b346101025761015e6101a461019f366004610175565b610518565b6040515b9182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166100fb565b90503590610114826101c1565b91906040838203126101025761012a906101f78185610168565b936020016101d0565b34610102576102196102133660046101dd565b9061055a565b604051005b34610102576102196102313660046101dd565b9061060a565b91906040838203126101025761012a906101f781856101d0565b3461010257610219610264366004610237565b906109fb565b909182601f830112156101025781359167ffffffffffffffff831161010257602001926020830284011161010257565b9060208282031261010257813567ffffffffffffffff8111610102576102c0920161026a565b9091565b34610102576102196102d736600461029a565b90610f05565b600091031261010257565b34610102576102f83660046102dd565b61015e7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5986101a4565b34610102576103313660046102dd565b61015e7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db6101a4565b346101025761015e61014c6103703660046101dd565b906104e8565b61012a61012a61012a9290565b61012a6000610376565b61012a610383565b34610102576103a53660046102dd565b61015e6101a461038d565b34610102576102196103c33660046101dd565b90610600565b906020828203126101025761012a916101d0565b34610102576102196103f03660046103c9565b610ac4565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821614908115610445575090565b61012a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101b561012a61012a926001600160a01b031690565b61012a906104a1565b61012a906104b7565b90610493906104c0565b61012a905b60ff1690565b61012a90546104d3565b61012a91610502916104fc60009182610491565b016104c9565b6104de565b61012a9081565b61012a9054610507565b600161053161012a92610529600090565b506000610491565b0161050e565b906101149161054d61054882610518565b610564565b9061055791610681565b50565b9061011491610537565b61011490339061058c565b6001600160a01b0390911681526040810192916101149160200152565b9061059e61059a82846104e8565b1590565b6105a6575050565b6105e16105b260405190565b9283927fe2517d3f0000000000000000000000000000000000000000000000000000000084526004840161056f565b0390fd5b90610114916105f661054882610518565b90610557916106fd565b90610114916105e5565b90610614336101b5565b6001600160a01b0382160361062c57610557916106fd565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061067661012a61067d92151590565b8254610657565b9055565b61068e61059a83836104e8565b156106f6576001916106af836106aa8360006104fc8782610491565b610666565b33906106e56106df6106df7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b926104c0565b926106ef60405190565b600090a490565b5050600090565b9061070881836104e8565b156106f65761072160006106aa83826104fc8782610491565b33906107516106df6106df7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261075b60405190565b600090a4600190565b61012a9060401c6104d8565b61012a9054610764565b61012a905b67ffffffffffffffff1690565b61012a905461077a565b61077f61012a61012a9290565b9067ffffffffffffffff9061065c565b61077f61012a61012a9267ffffffffffffffff1690565b906107da61012a61067d926107b3565b82546107a3565b9068ff00000000000000009060401b61065c565b9061080561012a61067d92151590565b82546107e1565b61012d90610796565b602081019291610114919061080c565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00908161085e61085861059a83610770565b9161078c565b9360009261086b84610796565b67ffffffffffffffff8716148061098d575b60019661089a61088c89610796565b9167ffffffffffffffff1690565b149081610965575b155b908161095c575b50610931576108d491836108cb866108c28a610796565b980197886107ca565b61092257610994565b6108dd57505050565b6108e6916107f5565b61091d7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29161091460405190565b91829182610815565b0390a1565b61092c87876107f5565b610994565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b159050386108ab565b90506108a4610973306104c0565b3b61098461098088610376565b9190565b149190506108a2565b508261087d565b906109d4610557926109ad816109a8610383565b610681565b507ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598610681565b507f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610681565b9061011491610825565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8054821015610a5457610a4b600191600052602060002090565b91020190600090565b610a1b565b9190600861065c910291610a736001600160a01b03841b90565b921b90565b9190610a8961012a61067d936104c0565b908354610a59565b9081549168010000000000000000831015610abf5782610ab991600161011495018155610a31565b90610a78565b610a05565b61011490610ad36001916104c0565b90610a91565b6101149190610b077f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610564565b610d96565b0190565b634e487b7160e01b600052601160045260246000fd5b6000198114610b355760010190565b610b10565b61012a916008021c6101b5565b9061012a9154610b3a565b90601f01601f1916810190811067ffffffffffffffff821117610abf57604052565b60ff81166100fb565b9050359061011482610b74565b5061012a906020810190610b7d565b5061012a906020810190610168565b5061012a9060208101906101d0565b9035601e19368390030181121561010257016020813591019167ffffffffffffffff82116101025736829003831361010257565b90826000939282370152565b9190610c1581610c0e81610b0c9560209181520190565b8095610beb565b601f01601f191690565b9061012a9060e0610ce6610cdc6101008401610c45610c3e8880610b8a565b60ff168652565b610c5c610c556020890189610b99565b6020870152565b610c73610c6c6040890189610b99565b6040870152565b610c8a610c836060890189610b99565b6060870152565b610caa610c9a6080890189610ba8565b6001600160a01b03166080870152565b610cc1610cba60a0890189610b99565b60a0870152565b610cce60c0880188610bb7565b9086830360c0880152610bf7565b9482810190610ba8565b6001600160a01b0316910152565b9061012a91610c1f565b903560fe193683900301811215610102570190565b818352916020019081610d296020830284019490565b92836000925b848410610d3f5750505050505090565b9091929394956020610d6b610d648385600195038852610d5f8b88610cfe565b610cf4565b9860200190565b940194019294939190610d2f565b602080825261012a93910191610d13565b6040513d6000823e3d90fd5b90919060009083610da683610376565b8114610ea657610dda7f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41916101a860405190565b0390a1610de682610376565b6001610df361012a825490565b821015610e9e57610e10610e0a83610e1593610a31565b90610b47565b6104c0565b9063d90d786e91803b1561010257610e3b928591610e3260405190565b94859260e01b90565b8252818381610e4e8c8a60048401610d79565b03925af1918215610e9957610e6892610e6d575b50610b26565b610de6565b610e8c90853d8711610e92575b610e848183610b52565b8101906102dd565b38610e62565b503d610e7a565b610d8a565b505050509050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f207472616e73616374696f6e7320746f20636f6e766572740000000000006044820152606490fd5b9061011491610ad956fea2646970667358221220b67ba19c18a233d92d36e36ee5b48a1bbfdebb7ee33eda44400e9229076b658d64736f6c63430008140033", } // TransactionsAnalyzerABI is the input ABI used to generate the binding from. @@ -456,25 +463,25 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) Initialize(e return _TransactionsAnalyzer.Contract.Initialize(&_TransactionsAnalyzer.TransactOpts, eoaAdmin, authorizedCaller) } -// OnBlock is a paid mutator transaction binding the contract method 0x9dbbcf8e. +// OnBlock is a paid mutator transaction binding the contract method 0x4a44e6c1. // -// Solidity: function onBlock((bytes[]) _block) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) OnBlock(opts *bind.TransactOpts, _block TransactionsAnalyzerBlockTransactions) (*types.Transaction, error) { - return _TransactionsAnalyzer.contract.Transact(opts, "onBlock", _block) +// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address)[] transactions) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) OnBlock(opts *bind.TransactOpts, transactions []StructsTransaction) (*types.Transaction, error) { + return _TransactionsAnalyzer.contract.Transact(opts, "onBlock", transactions) } -// OnBlock is a paid mutator transaction binding the contract method 0x9dbbcf8e. +// OnBlock is a paid mutator transaction binding the contract method 0x4a44e6c1. // -// Solidity: function onBlock((bytes[]) _block) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) OnBlock(_block TransactionsAnalyzerBlockTransactions) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.OnBlock(&_TransactionsAnalyzer.TransactOpts, _block) +// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address)[] transactions) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerSession) OnBlock(transactions []StructsTransaction) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.OnBlock(&_TransactionsAnalyzer.TransactOpts, transactions) } -// OnBlock is a paid mutator transaction binding the contract method 0x9dbbcf8e. +// OnBlock is a paid mutator transaction binding the contract method 0x4a44e6c1. // -// Solidity: function onBlock((bytes[]) _block) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) OnBlock(_block TransactionsAnalyzerBlockTransactions) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.OnBlock(&_TransactionsAnalyzer.TransactOpts, _block) +// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address)[] transactions) returns() +func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) OnBlock(transactions []StructsTransaction) (*types.Transaction, error) { + return _TransactionsAnalyzer.Contract.OnBlock(&_TransactionsAnalyzer.TransactOpts, transactions) } // RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. @@ -1138,3 +1145,137 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) ParseRoleRevoked(log event.Raw = log return event, nil } + +// TransactionsAnalyzerTransactionsConvertedIterator is returned from FilterTransactionsConverted and is used to iterate over the raw logs and unpacked data for TransactionsConverted events raised by the TransactionsAnalyzer contract. +type TransactionsAnalyzerTransactionsConvertedIterator struct { + Event *TransactionsAnalyzerTransactionsConverted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TransactionsAnalyzerTransactionsConvertedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TransactionsAnalyzerTransactionsConverted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TransactionsAnalyzerTransactionsConverted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TransactionsAnalyzerTransactionsConvertedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TransactionsAnalyzerTransactionsConvertedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TransactionsAnalyzerTransactionsConverted represents a TransactionsConverted event raised by the TransactionsAnalyzer contract. +type TransactionsAnalyzerTransactionsConverted struct { + TransactionsLength *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransactionsConverted is a free log retrieval operation binding the contract event 0x3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41. +// +// Solidity: event TransactionsConverted(uint256 transactionsLength) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterTransactionsConverted(opts *bind.FilterOpts) (*TransactionsAnalyzerTransactionsConvertedIterator, error) { + + logs, sub, err := _TransactionsAnalyzer.contract.FilterLogs(opts, "TransactionsConverted") + if err != nil { + return nil, err + } + return &TransactionsAnalyzerTransactionsConvertedIterator{contract: _TransactionsAnalyzer.contract, event: "TransactionsConverted", logs: logs, sub: sub}, nil +} + +// WatchTransactionsConverted is a free log subscription operation binding the contract event 0x3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41. +// +// Solidity: event TransactionsConverted(uint256 transactionsLength) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchTransactionsConverted(opts *bind.WatchOpts, sink chan<- *TransactionsAnalyzerTransactionsConverted) (event.Subscription, error) { + + logs, sub, err := _TransactionsAnalyzer.contract.WatchLogs(opts, "TransactionsConverted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TransactionsAnalyzerTransactionsConverted) + if err := _TransactionsAnalyzer.contract.UnpackLog(event, "TransactionsConverted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransactionsConverted is a log parse operation binding the contract event 0x3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41. +// +// Solidity: event TransactionsConverted(uint256 transactionsLength) +func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) ParseTransactionsConverted(log types.Log) (*TransactionsAnalyzerTransactionsConverted, error) { + event := new(TransactionsAnalyzerTransactionsConverted) + if err := _TransactionsAnalyzer.contract.UnpackLog(event, "TransactionsConverted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/generated/ZenBase/ZenBase.go b/contracts/generated/ZenBase/ZenBase.go index 42d0c6d1d5..36faa5916b 100644 --- a/contracts/generated/ZenBase/ZenBase.go +++ b/contracts/generated/ZenBase/ZenBase.go @@ -31,26 +31,20 @@ var ( // StructsTransaction is an auto generated low-level Go binding around an user-defined struct. type StructsTransaction struct { - TxType uint8 - ChainId *big.Int - Nonce *big.Int - GasPrice *big.Int - GasLimit *big.Int - To common.Address - Value *big.Int - Data []byte - V uint8 - R [32]byte - S [32]byte - MaxPriorityFeePerGas *big.Int - MaxFeePerGas *big.Int - AccessList []common.Address + TxType uint8 + Nonce *big.Int + GasPrice *big.Int + GasLimit *big.Int + To common.Address + Value *big.Int + Data []byte + From common.Address } // ZenBaseMetaData contains all meta data concerning the ZenBase contract. var ZenBaseMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionAnalyzer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"transactionDecoder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"accessList\",\"type\":\"address[]\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523462000031576200001f62000018620000e5565b90620002c0565b6040516111e46200063d82396111e490f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003157565b905051906200008b826200009c565b919060408382031262000031576200009990620000db8185620000ae565b93602001620000ae565b620001086200182180380380620000fc8162000074565b928339810190620000bd565b9091565b6001600160401b0381116200006e57602090601f01601f19160190565b906200013f62000139836200010c565b62000074565b918252565b62000150600362000129565b622d32b760e91b602082015290565b6200009962000144565b62000175600362000129565b622d22a760e91b602082015290565b6200009962000169565b6200008d62000099620000999290565b62000099906200018e565b15620001b157565b60405162461bcd60e51b8152602060048201526024808201527f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164646044820152637265737360e01b6064820152608490fd5b0390fd5b156200020e57565b60405162461bcd60e51b815260206004820152602360248201527f496e76616c6964207472616e73616374696f6e206465636f646572206164647260448201526265737360e81b6064820152608490fd5b906001600160a01b03905b9181191691161790565b62000099906200008d906001600160a01b031682565b620000999062000274565b62000099906200028a565b90620002b462000099620002bc9262000295565b82546200025f565b9055565b90620003386200008b92620002ea33620002d96200015f565b620002e362000184565b9162000340565b620003306200031e620002fe60006200019e565b6200008d6001600160a01b0382166001600160a01b0386161415620001a9565b6001600160a01b038516141562000206565b6006620002a0565b6007620002a0565b916200034c91620005a9565b6200035860006200019e565b6001600160a01b0381166001600160a01b038316146200037e57506200008b90620005da565b62000202906200038d60405190565b631e4fbdf760e01b8152918291600483016001600160a01b03909116815260200190565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620003ea575b6020831014620003e457565b620003b1565b91607f1691620003d8565b9160001960089290920291821b911b6200026a565b6200009962000099620000999290565b91906200042f62000099620002bc936200040a565b908354620003f5565b6200008b916000916200041a565b81811062000452575050565b8062000462600060019362000438565b0162000446565b9190601f81116200047957505050565b6200048d6200008b93600052602060002090565b906020601f840181900483019310620004b1575b6020601f90910104019062000446565b9091508190620004a1565b90620004c6815190565b906001600160401b0382116200006e57620004ee82620004e78554620003c7565b8562000469565b602090601f83116001146200052d57620002bc92916000918362000521575b5050600019600883021c1916906002021790565b0151905038806200050d565b601f198316916200054385600052602060002090565b9260005b81811062000584575091600293918560019694106200056a575b50505002019055565b01516000196008601f8516021c1916905538808062000561565b9193602060018192878701518155019501920162000547565b906200008b91620004bc565b90620005bb6200008b9260036200059d565b60046200059d565b62000099906200008d565b620000999054620005c3565b620005e66005620005ce565b90620005f4816005620002a0565b6200062b620006247f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000295565b9162000295565b916200063660405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806306fdde03146100e2578063095ea7b3146100dd57806318160ddd146100d857806323b872dd146100d3578063313ce567146100ce578063630ac52c146100c957806370a08231146100c4578063715018a6146100bf5780638da5cb5b146100ba57806395d89b41146100b5578063a9059cbb146100b0578063dd62ed3e146100ab5763f2fde38b036100f25761043d565b610421565b6103e2565b6103c7565b610388565b610370565b610355565b610323565b61029a565b61027e565b610222565b6101f4565b610166565b60009103126100f257565b600080fd5b60005b83811061010a5750506000910152565b81810151838201526020016100fa565b61013b61014460209361014e9361012f815190565b80835293849260200190565b958691016100f7565b601f01601f191690565b0190565b60208082526101639291019061011a565b90565b346100f2576101763660046100e7565b61018d610181610781565b60405191829182610152565b0390f35b6001600160a01b031690565b6001600160a01b0381165b036100f257565b905035906101bc8261019d565b565b806101a8565b905035906101bc826101be565b91906040838203126100f257610163906101eb81856101af565b936020016101c4565b346100f25761018d61021061020a3660046101d1565b90610836565b60405191829182901515815260200190565b346100f2576102323660046100e7565b61018d61023d6107c3565b6040515b9182918290815260200190565b90916060828403126100f25761016361026784846101af565b9361027581602086016101af565b936040016101c4565b346100f25761018d61021061029436600461024e565b91610841565b346100f2576102aa3660046100e7565b61018d6102b56107a8565b6040519182918260ff909116815260200190565b909182601f830112156100f25781359167ffffffffffffffff83116100f25760200192602083028401116100f257565b906020828203126100f257813567ffffffffffffffff81116100f25761031f92016102c9565b9091565b346100f25761033c6103363660046102f9565b90611167565b604051005b906020828203126100f257610163916101af565b346100f25761018d61023d61036b366004610341565b6107e5565b346100f2576103803660046100e7565b61033c61048d565b346100f2576103983660046100e7565b61018d6103ad6005546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b346100f2576103d73660046100e7565b61018d61018161078b565b346100f25761018d6102106103f83660046101d1565b90610801565b91906040838203126100f2576101639061041881856101af565b936020016101af565b346100f25761018d61023d6104373660046103fe565b90610816565b346100f25761033c610450366004610341565b61058e565b61045d610495565b6101bc61047b565b6101916101636101639290565b61016390610465565b6101bc6104886000610472565b6105ef565b6101bc610455565b6005546001600160a01b031633906104b5825b916001600160a01b031690565b036104bd5750565b610507906104ca60405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6101bc90610517610495565b6105216000610472565b6001600160a01b0381166001600160a01b0383161461054457506101bc906105ef565b6105079061055160405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6101bc9061050b565b906001600160a01b03905b9181191691161790565b610191610163610163926001600160a01b031690565b610163906105ac565b610163906105c2565b906105e46101636105eb926105cb565b8254610597565b9055565b6005546001600160a01b0316906106078160056105d4565b61063a6106347f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936105cb565b916105cb565b9161064460405190565b80805b0390a3565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610682575b602083101461067d57565b61064c565b91607f1691610672565b805460009392916106a961069f83610662565b8085529360200190565b91600181169081156106fb57506001146106c257505050565b6106d59192939450600052602060002090565b916000925b8184106106e75750500190565b8054848401526020909301926001016106da565b92949550505060ff1916825215156020020190565b906101639161068c565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761075257604052565b61071a565b906101bc6107719261076860405190565b93848092610710565b0383610730565b61016390610757565b6101636003610778565b6101636004610778565b6107a26101636101639290565b60ff1690565b6101636012610795565b6101639081565b61016390546107b2565b61016360026107b9565b906107d7906105cb565b600052602052604060002090565b6107fc610163916107f4600090565b5060006107cd565b6107b9565b610811919033610852565b610852565b600190565b610163916108316107fc92610829600090565b5060016107cd565b6107cd565b610811919033610af8565b61081192919061080c833383610c22565b92919061085f6000610472565b936001600160a01b0385166001600160a01b038216146108e7576001600160a01b0385166001600160a01b0383161461089d576101bc9394506109b2565b610507856108aa60405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b610507856108f460405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6001600160a01b0390911681526060810193926101bc929091604091610958906020830152565b0152565b90600019906105a2565b6101636101636101639290565b906109836101636105eb92610966565b825461095c565b634e487b7160e01b600052601160045260246000fd5b919082018092116109ad57565b61098a565b8160006109be81610472565b6001600160a01b0381166001600160a01b03851603610a83576109f8906101916109f1886109ec60026107b9565b6109a0565b6002610973565b6001600160a01b03831603610a5e575050610a1e6109f184610a1a60026107b9565b0390565b610647610a54610a4e7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef936105cb565b936105cb565b9361024160405190565b610a7e91610a6b916107cd565b610a788561014e836107b9565b90610973565b610a1e565b909150610a936107fc84846107cd565b858110610abb57849291610191610aac886109f8940390565b610ab687866107cd565b610973565b8361050787610ac960405190565b9384937fe450d38c00000000000000000000000000000000000000000000000000000000855260048501610931565b90916101bc926001925b909192610b0f6000610472565b6001600160a01b0381166001600160a01b03841614610bd8576001600160a01b0381166001600160a01b03851614610b8e5750610b5584610ab6856108318660016107cd565b610b5e57505050565b610647610a54610a4e7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925936105cb565b61050790610b9b60405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61050790610be560405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b90929192610c308183610816565b936000198503610c42575b5050509050565b808510610c6857610c5690610c5f94950390565b90600092610b02565b80388080610c3b565b906105078592610c7760405190565b9384937ffb8f41b200000000000000000000000000000000000000000000000000000000855260048501610931565b15610cad57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60448201527f61746564206164647265737300000000000000000000000000000000000000006064820152608490fd5b906101bc91610d5933610d536104a86101916006546001600160a01b031690565b14610ca6565b61108b565b60001981146109ad5760010190565b634e487b7160e01b600052603260045260246000fd5b9035906101be1936829003018212156100f2570190565b90821015610db15760206101639202810190610d83565b610d6d565b905051906101bc8261019d565b906020828203126100f25761016391610db6565b60ff81166101a8565b905035906101bc82610dd7565b50610163906020810190610de0565b506101639060208101906101c4565b506101639060208101906101af565b9035601e1936839003018112156100f257016020813591019167ffffffffffffffff82116100f2573682900383136100f257565b90826000939282370152565b919061014481610e718161014e9560209181520190565b8095610e4e565b9035601e1936839003018112156100f257016020813591019167ffffffffffffffff82116100f25760208202360383136100f257565b818352602090920191906000825b828210610eca575050505090565b90919293610ef9610ef2600192610ee18886610e0b565b6001600160a01b0316815260200190565b9560200190565b93920190610ebc565b6101639161105f610fd36101c08301610f25610f1e8680610ded565b60ff168552565b610f3c610f356020870187610dfc565b6020860152565b610f53610f4c6040870187610dfc565b6040860152565b610f6a610f636060870187610dfc565b6060860152565b610f81610f7a6080870187610dfc565b6080860152565b610fa1610f9160a0870187610e0b565b6001600160a01b031660a0860152565b610fb8610fb160c0870187610dfc565b60c0860152565b610fc560e0860186610e1a565b9085830360e0870152610e5a565b92610ff0610fe5610100830183610ded565b60ff16610100850152565b611009611001610120830183610dfc565b610120850152565b61102261101a610140830183610dfc565b610140850152565b61103b611033610160830183610dfc565b610160850152565b61105461104c610180830183610dfc565b610180850152565b6101a0810190610e78565b916101a0818503910152610eae565b602080825261016392910190610f02565b6040513d6000823e3d90fd5b91906110976000610966565b81811015611161576110f89060206110c26110bd6110bd6007546001600160a01b031690565b6105cb565b6323bc02dd906110ed6110d685888b610d9a565b926110e060405190565b9687948593849360e01b90565b83526004830161106e565b03915afa91821561115c57611129926111249160009161112e575b5061111e6001610966565b90611171565b610d5e565b611097565b61114f915060203d8111611155575b6111478183610730565b810190610dc3565b38611113565b503d61113d565b61107f565b50509050565b906101bc91610d32565b919061117d6000610472565b926001600160a01b0384166001600160a01b038216146111a1576101bc92936109b2565b610507846108aa6040519056fea2646970667358221220278d99c1097531adcce1df939920329f478a45496964d2f7bc6c675345cb9a2364736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionAnalyzer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"transactionDecoder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523462000031576200001f62000018620000e5565b90620002c0565b604051610f4c6200063d8239610f4c90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003157565b905051906200008b826200009c565b919060408382031262000031576200009990620000db8185620000ae565b93602001620000ae565b620001086200158980380380620000fc8162000074565b928339810190620000bd565b9091565b6001600160401b0381116200006e57602090601f01601f19160190565b906200013f62000139836200010c565b62000074565b918252565b62000150600362000129565b622d32b760e91b602082015290565b6200009962000144565b62000175600362000129565b622d22a760e91b602082015290565b6200009962000169565b6200008d62000099620000999290565b62000099906200018e565b15620001b157565b60405162461bcd60e51b8152602060048201526024808201527f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164646044820152637265737360e01b6064820152608490fd5b0390fd5b156200020e57565b60405162461bcd60e51b815260206004820152602360248201527f496e76616c6964207472616e73616374696f6e206465636f646572206164647260448201526265737360e81b6064820152608490fd5b906001600160a01b03905b9181191691161790565b62000099906200008d906001600160a01b031682565b620000999062000274565b62000099906200028a565b90620002b462000099620002bc9262000295565b82546200025f565b9055565b90620003386200008b92620002ea33620002d96200015f565b620002e362000184565b9162000340565b620003306200031e620002fe60006200019e565b6200008d6001600160a01b0382166001600160a01b0386161415620001a9565b6001600160a01b038516141562000206565b6006620002a0565b6007620002a0565b916200034c91620005a9565b6200035860006200019e565b6001600160a01b0381166001600160a01b038316146200037e57506200008b90620005da565b62000202906200038d60405190565b631e4fbdf760e01b8152918291600483016001600160a01b03909116815260200190565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620003ea575b6020831014620003e457565b620003b1565b91607f1691620003d8565b9160001960089290920291821b911b6200026a565b6200009962000099620000999290565b91906200042f62000099620002bc936200040a565b908354620003f5565b6200008b916000916200041a565b81811062000452575050565b8062000462600060019362000438565b0162000446565b9190601f81116200047957505050565b6200048d6200008b93600052602060002090565b906020601f840181900483019310620004b1575b6020601f90910104019062000446565b9091508190620004a1565b90620004c6815190565b906001600160401b0382116200006e57620004ee82620004e78554620003c7565b8562000469565b602090601f83116001146200052d57620002bc92916000918362000521575b5050600019600883021c1916906002021790565b0151905038806200050d565b601f198316916200054385600052602060002090565b9260005b81811062000584575091600293918560019694106200056a575b50505002019055565b01516000196008601f8516021c1916905538808062000561565b9193602060018192878701518155019501920162000547565b906200008b91620004bc565b90620005bb6200008b9260036200059d565b60046200059d565b62000099906200008d565b620000999054620005c3565b620005e66005620005ce565b90620005f4816005620002a0565b6200062b620006247f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000295565b9162000295565b916200063660405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806306fdde03146100e2578063095ea7b3146100dd57806318160ddd146100d857806323b872dd146100d3578063313ce567146100ce57806370a08231146100c9578063715018a6146100c45780638da5cb5b146100bf57806395d89b41146100ba578063a9059cbb146100b5578063d90d786e146100b0578063dd62ed3e146100ab5763f2fde38b036100f257610441565b610425565b6103e9565b610373565b610358565b610319565b6102fc565b6102e1565b61029e565b610282565b610226565b6101f8565b610166565b60009103126100f257565b600080fd5b60005b83811061010a5750506000910152565b81810151838201526020016100fa565b61013b61014460209361014e9361012f815190565b80835293849260200190565b958691016100f7565b601f01601f191690565b0190565b60208082526101639291019061011a565b90565b346100f2576101763660046100e7565b61018d610181610785565b60405191829182610152565b0390f35b6001600160a01b031690565b6001600160a01b0381165b036100f257565b905035906101bc8261019d565b565b806101a8565b905035906101bc826101be565b91906040838203126100f257610163906101eb81856101af565b936020016101c4565b9052565b346100f25761018d61021461020e3660046101d1565b9061083a565b60405191829182901515815260200190565b346100f2576102363660046100e7565b61018d6102416107c7565b6040515b9182918290815260200190565b90916060828403126100f25761016361026b84846101af565b9361027981602086016101af565b936040016101c4565b346100f25761018d610214610298366004610252565b91610845565b346100f2576102ae3660046100e7565b61018d6102b96107ac565b6040519182918260ff909116815260200190565b906020828203126100f257610163916101af565b346100f25761018d6102416102f73660046102cd565b6107e9565b346100f25761030c3660046100e7565b610314610491565b604051005b346100f2576103293660046100e7565b61018d61033e6005546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b346100f2576103683660046100e7565b61018d61018161078f565b346100f25761018d6102146103893660046101d1565b90610805565b909182601f830112156100f25781359167ffffffffffffffff83116100f25760200192602083028401116100f257565b906020828203126100f257813567ffffffffffffffff81116100f2576103e5920161038f565b9091565b346100f2576103146103fc3660046103bf565b90610ecf565b91906040838203126100f2576101639061041c81856101af565b936020016101af565b346100f25761018d61024161043b366004610402565b9061081a565b346100f2576103146104543660046102cd565b610592565b610461610499565b6101bc61047f565b6101916101636101639290565b61016390610469565b6101bc61048c6000610476565b6105f3565b6101bc610459565b6005546001600160a01b031633906104b9825b916001600160a01b031690565b036104c15750565b61050b906104ce60405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6101bc9061051b610499565b6105256000610476565b6001600160a01b0381166001600160a01b0383161461054857506101bc906105f3565b61050b9061055560405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6101bc9061050f565b906001600160a01b03905b9181191691161790565b610191610163610163926001600160a01b031690565b610163906105b0565b610163906105c6565b906105e86101636105ef926105cf565b825461059b565b9055565b6005546001600160a01b03169061060b8160056105d8565b61063e6106387f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936105cf565b916105cf565b9161064860405190565b80805b0390a3565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610686575b602083101461068157565b610650565b91607f1691610676565b805460009392916106ad6106a383610666565b8085529360200190565b91600181169081156106ff57506001146106c657505050565b6106d99192939450600052602060002090565b916000925b8184106106eb5750500190565b8054848401526020909301926001016106de565b92949550505060ff1916825215156020020190565b9061016391610690565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761075657604052565b61071e565b906101bc6107759261076c60405190565b93848092610714565b0383610734565b6101639061075b565b610163600361077c565b610163600461077c565b6107a66101636101639290565b60ff1690565b6101636012610799565b6101639081565b61016390546107b6565b61016360026107bd565b906107db906105cf565b600052602052604060002090565b610800610163916107f8600090565b5060006107d1565b6107bd565b610815919033610856565b610856565b600190565b610163916108356108009261082d600090565b5060016107d1565b6107d1565b610815919033610afc565b610815929190610810833383610c26565b9291906108636000610476565b936001600160a01b0385166001600160a01b038216146108eb576001600160a01b0385166001600160a01b038316146108a1576101bc9394506109b6565b61050b856108ae60405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61050b856108f860405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6001600160a01b0390911681526060810193926101bc92909160409161095c906020830152565b0152565b90600019906105a6565b6101636101636101639290565b906109876101636105ef9261096a565b8254610960565b634e487b7160e01b600052601160045260246000fd5b919082018092116109b157565b61098e565b8160006109c281610476565b6001600160a01b0381166001600160a01b03851603610a87576109fc906101916109f5886109f060026107bd565b6109a4565b6002610977565b6001600160a01b03831603610a62575050610a226109f584610a1e60026107bd565b0390565b61064b610a58610a527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef936105cf565b936105cf565b9361024560405190565b610a8291610a6f916107d1565b610a7c8561014e836107bd565b90610977565b610a22565b909150610a9761080084846107d1565b858110610abf57849291610191610ab0886109fc940390565b610aba87866107d1565b610977565b8361050b87610acd60405190565b9384937fe450d38c00000000000000000000000000000000000000000000000000000000855260048501610935565b90916101bc926001925b909192610b136000610476565b6001600160a01b0381166001600160a01b03841614610bdc576001600160a01b0381166001600160a01b03851614610b925750610b5984610aba856108358660016107d1565b610b6257505050565b61064b610a58610a527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925936105cf565b61050b90610b9f60405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61050b90610be960405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b90929192610c34818361081a565b936000198503610c46575b5050509050565b808510610c6c57610c5a90610c6394950390565b90600092610b06565b80388080610c3f565b9061050b8592610c7b60405190565b9384937ffb8f41b200000000000000000000000000000000000000000000000000000000855260048501610935565b15610cb157565b60405162461bcd60e51b815260206004820152602c60248201527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60448201527f61746564206164647265737300000000000000000000000000000000000000006064820152608490fd5b906101bc91610d4333610d3d6104ac6101916006546001600160a01b031690565b14610caa565b610dd2565b60001981146109b15760010190565b634e487b7160e01b600052603260045260246000fd5b90359060fe1936829003018212156100f2570190565b90821015610d9a5760206101639202810190610d6d565b610d57565b356101638161019d565b6101f49061096a565b6001600160a01b0390911681526040810192916101bc9160200190610da9565b90919082916000610de28161096a565b8414610e8a57610df19061096a565b835b811015610e8357610e7c81610e1760e0610e11610df3958a89610d83565b01610d9f565b610e2c600191610e268361096a565b90610ed9565b610e3c60e0610e11848b8a610d83565b907fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d191610e74610e6b60405190565b92839283610db2565b0390a1610d48565b9050610df1565b5092505050565b60405162461bcd60e51b815260206004820152601a60248201527f4e6f207472616e73616374696f6e7320746f20636f6e766572740000000000006044820152606490fd5b906101bc91610d1c565b9190610ee56000610476565b926001600160a01b0384166001600160a01b03821614610f09576101bc92936109b6565b61050b846108ae6040519056fea26469706673582212200bf2389345a6ce0308f2ab2a649cd0b188f3cb4d3f587920c3a8cd78fec8128664736f6c63430008140033", } // ZenBaseABI is the input ABI used to generate the binding from. @@ -458,23 +452,23 @@ func (_ZenBase *ZenBaseTransactorSession) Approve(spender common.Address, value return _ZenBase.Contract.Approve(&_ZenBase.TransactOpts, spender, value) } -// OnBlockEnd is a paid mutator transaction binding the contract method 0x630ac52c. +// OnBlockEnd is a paid mutator transaction binding the contract method 0xd90d786e. // -// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[])[] transactions) returns() +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address)[] transactions) returns() func (_ZenBase *ZenBaseTransactor) OnBlockEnd(opts *bind.TransactOpts, transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.contract.Transact(opts, "onBlockEnd", transactions) } -// OnBlockEnd is a paid mutator transaction binding the contract method 0x630ac52c. +// OnBlockEnd is a paid mutator transaction binding the contract method 0xd90d786e. // -// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[])[] transactions) returns() +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address)[] transactions) returns() func (_ZenBase *ZenBaseSession) OnBlockEnd(transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.Contract.OnBlockEnd(&_ZenBase.TransactOpts, transactions) } -// OnBlockEnd is a paid mutator transaction binding the contract method 0x630ac52c. +// OnBlockEnd is a paid mutator transaction binding the contract method 0xd90d786e. // -// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[])[] transactions) returns() +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address)[] transactions) returns() func (_ZenBase *ZenBaseTransactorSession) OnBlockEnd(transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.Contract.OnBlockEnd(&_ZenBase.TransactOpts, transactions) } @@ -870,6 +864,141 @@ func (_ZenBase *ZenBaseFilterer) ParseOwnershipTransferred(log types.Log) (*ZenB return event, nil } +// ZenBaseTransactionProcessedIterator is returned from FilterTransactionProcessed and is used to iterate over the raw logs and unpacked data for TransactionProcessed events raised by the ZenBase contract. +type ZenBaseTransactionProcessedIterator struct { + Event *ZenBaseTransactionProcessed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZenBaseTransactionProcessedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZenBaseTransactionProcessed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZenBaseTransactionProcessed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZenBaseTransactionProcessedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZenBaseTransactionProcessedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZenBaseTransactionProcessed represents a TransactionProcessed event raised by the ZenBase contract. +type ZenBaseTransactionProcessed struct { + Sender common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransactionProcessed is a free log retrieval operation binding the contract event 0xe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1. +// +// Solidity: event TransactionProcessed(address sender, uint256 amount) +func (_ZenBase *ZenBaseFilterer) FilterTransactionProcessed(opts *bind.FilterOpts) (*ZenBaseTransactionProcessedIterator, error) { + + logs, sub, err := _ZenBase.contract.FilterLogs(opts, "TransactionProcessed") + if err != nil { + return nil, err + } + return &ZenBaseTransactionProcessedIterator{contract: _ZenBase.contract, event: "TransactionProcessed", logs: logs, sub: sub}, nil +} + +// WatchTransactionProcessed is a free log subscription operation binding the contract event 0xe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1. +// +// Solidity: event TransactionProcessed(address sender, uint256 amount) +func (_ZenBase *ZenBaseFilterer) WatchTransactionProcessed(opts *bind.WatchOpts, sink chan<- *ZenBaseTransactionProcessed) (event.Subscription, error) { + + logs, sub, err := _ZenBase.contract.WatchLogs(opts, "TransactionProcessed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZenBaseTransactionProcessed) + if err := _ZenBase.contract.UnpackLog(event, "TransactionProcessed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransactionProcessed is a log parse operation binding the contract event 0xe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1. +// +// Solidity: event TransactionProcessed(address sender, uint256 amount) +func (_ZenBase *ZenBaseFilterer) ParseTransactionProcessed(log types.Log) (*ZenBaseTransactionProcessed, error) { + event := new(ZenBaseTransactionProcessed) + if err := _ZenBase.contract.UnpackLog(event, "TransactionProcessed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ZenBaseTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ZenBase contract. type ZenBaseTransferIterator struct { Event *ZenBaseTransfer // Event containing the contract specifics and raw log diff --git a/contracts/src/system/Transaction.sol b/contracts/src/system/Transaction.sol index 8c7f6e3a36..7ae8fb68d7 100644 --- a/contracts/src/system/Transaction.sol +++ b/contracts/src/system/Transaction.sol @@ -12,45 +12,12 @@ library Structs { struct Transaction { uint8 txType; - uint256 chainId; uint256 nonce; uint256 gasPrice; uint256 gasLimit; address to; uint256 value; bytes data; - uint8 v; - bytes32 r; - bytes32 s; - uint256 maxPriorityFeePerGas; - uint256 maxFeePerGas; - address[] accessList; - } - - function recoverSender(Transaction calldata txData) external pure returns (address sender) { - // Step 1: Hash the transaction data excluding the signature fields (v, r, s) - bytes32 dataHash = keccak256( - abi.encode( - txData.txType, - txData.chainId, - txData.nonce, - txData.gasPrice, - txData.gasLimit, - txData.to, - txData.value, - txData.data, - txData.maxPriorityFeePerGas, - txData.maxFeePerGas, - txData.accessList - ) - ); - - // Step 2: Prefix the hash with the standard Ethereum message prefix - bytes32 ethSignedHash = dataHash.toEthSignedMessageHash(); - - // Step 3: Recover the address using the signature parameters - sender = ECDSA.recover(ethSignedHash, txData.v, txData.r, txData.s); - - return sender; + address from; } } \ No newline at end of file diff --git a/contracts/src/system/TransactionDecoder.sol b/contracts/src/system/TransactionDecoder.sol deleted file mode 100644 index b2edf96a78..0000000000 --- a/contracts/src/system/TransactionDecoder.sol +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "./Transaction.sol"; - -library TransactionDecoder { - using Structs for Structs.Transaction; - - function decode(bytes calldata rawTransaction) internal pure returns (Structs.Transaction memory) { - require(rawTransaction.length > 0, "Empty transaction data"); - uint8 _txType = uint8(rawTransaction[0]); - - if (_txType == 0) { - return decodeLegacyTransaction(rawTransaction); - } else if (_txType == 1) { - return decodeEIP2930Transaction(rawTransaction); - } else if (_txType == 2) { - return decodeEIP1559Transaction(rawTransaction); - } else { - revert("Unsupported transaction type"); - } - } - - function decodeLegacyTransaction(bytes calldata rawTransaction) private pure returns (Structs.Transaction memory) { - Structs.Transaction memory _tx; - _tx.txType = 0; - - (_tx.nonce, _tx.gasPrice, _tx.gasLimit, _tx.to, _tx.value, _tx.data, _tx.v, _tx.r, _tx.s) = - abi.decode(rawTransaction, (uint256, uint256, uint256, address, uint256, bytes, uint8, bytes32, bytes32)); - - return _tx; - } - - function decodeEIP2930Transaction(bytes calldata rawTransaction) private pure returns (Structs.Transaction memory) { - Structs.Transaction memory _tx; - _tx.txType = 1; - - (_tx.chainId, _tx.nonce, _tx.gasPrice, _tx.gasLimit, _tx.to, _tx.value, _tx.data, _tx.accessList, _tx.v, _tx.r, _tx.s) = - abi.decode(rawTransaction[1:], (uint256, uint256, uint256, uint256, address, uint256, bytes, address[], uint8, bytes32, bytes32)); - - return _tx; - } - - function decodeEIP1559Transaction(bytes calldata rawTransaction) private pure returns (Structs.Transaction memory) { - Structs.Transaction memory _tx; - _tx.txType = 2; - - (_tx.chainId, _tx.nonce, _tx.maxPriorityFeePerGas, _tx.maxFeePerGas, _tx.gasLimit, _tx.to, _tx.value, _tx.data, _tx.accessList, _tx.v, _tx.r, _tx.s) = - abi.decode(rawTransaction[1:], (uint256, uint256, uint256, uint256, uint256, address, uint256, bytes, address[], uint8, bytes32, bytes32)); - - return _tx; - } -} \ No newline at end of file diff --git a/contracts/src/system/TransactionsAnalyzer.sol b/contracts/src/system/TransactionsAnalyzer.sol index 8547d98d77..01ce032cc4 100644 --- a/contracts/src/system/TransactionsAnalyzer.sol +++ b/contracts/src/system/TransactionsAnalyzer.sol @@ -4,38 +4,22 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/AccessControl.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; -import "./TransactionDecoder.sol"; import "./OnBlockEndCallback.sol"; +import "./Transaction.sol"; //TODO: @PR Review - Pick appropriate name contract TransactionsAnalyzer is Initializable, AccessControl{ + using Structs for Structs.Transaction; + bytes32 public constant EOA_ADMIN_ROLE = keccak256("EOA_ADMIN_ROLE"); bytes32 public constant HOOK_CALLER_ROLE = keccak256("HOOK_CALLER_ROLE"); + event TransactionsConverted(uint256 transactionsLength); + struct Receipt { uint8 _type; bytes postState; uint64 Status; - /* - CumulativeGasUsed uint64 - Bloom Bloom - Logs []*Log - - TxHash common.Hash - ContractAddress common.Address - GasUsed uint64 - EffectiveGasPrice *big.In - BlobGasUsed uint64 - BlobGasPrice *big.Int - - BlockHash common.Ha - BlockNumber *big.Int - TransactionIndex uint - */ - } - - struct BlockTransactions { - bytes[] transactions; } OnBlockEndCallback[] onBlockEndListeners; @@ -50,18 +34,13 @@ contract TransactionsAnalyzer is Initializable, AccessControl{ onBlockEndListeners.push(OnBlockEndCallback(callbackAddress)); } - function onBlock(BlockTransactions calldata _block) public onlyRole(HOOK_CALLER_ROLE) { - if (_block.transactions.length == 0) { - return; + function onBlock(Structs.Transaction[] calldata transactions) public onlyRole(HOOK_CALLER_ROLE) { + if (transactions.length == 0) { + revert("No transactions to convert"); } - - Structs.Transaction[] memory transactions = new Structs.Transaction[](_block.transactions.length); - for (uint256 i = 0; i < _block.transactions.length; ++i) { - transactions[i] = (TransactionDecoder.decode(_block.transactions[i])); - } - - + emit TransactionsConverted(transactions.length); + for (uint256 i = 0; i < onBlockEndListeners.length; ++i) { OnBlockEndCallback callback = onBlockEndListeners[i]; callback.onBlockEnd(transactions); diff --git a/contracts/src/zen/ZenBase.sol b/contracts/src/zen/ZenBase.sol index 3aa353ef44..115f67d0aa 100644 --- a/contracts/src/zen/ZenBase.sol +++ b/contracts/src/zen/ZenBase.sol @@ -25,6 +25,8 @@ interface ITransactionDecoder { */ contract ZenBase is OnBlockEndCallback, ERC20, Ownable { using Structs for Structs.Transaction; + + event TransactionProcessed(address sender, uint256 amount); /** * @dev Constructor that gives msg.sender all of existing tokens. * You can customize the initial supply as needed. @@ -46,28 +48,14 @@ contract ZenBase is OnBlockEndCallback, ERC20, Ownable { } function onBlockEnd(Structs.Transaction[] calldata transactions) external onlyCaller { + if (transactions.length == 0) { + revert("No transactions to convert"); + } // Implement custom logic here for (uint256 i=0; i 2 { + // Parse onBlockReceipt for the TransactionsConverted event + abi, err := TransactionsAnalyzer.TransactionsAnalyzerMetaData.GetAbi() + if err != nil { + panic(err) + return nil, err + } + result := onBlockTxResult[0] + if ok, err := executor.systemContracts.VerifyOnBlockReceipt(successfulTxs, result.Receipt); !ok || err != nil { + executor.logger.Error("VerifyOnBlockReceipt failed", "error", err, "ok", ok) + panic("VerifyOnBlockReceipt failed") + return nil, fmt.Errorf("VerifyOnBlockReceipt failed") + } + + if len(result.Receipt.Logs) == 0 { + panic(fmt.Errorf("no logs in onBlockReceipt")) + return nil, fmt.Errorf("no logs in onBlockReceipt") + } + + for _, log := range result.Receipt.Logs { + if len(log.Topics) > 0 && log.Topics[0] == abi.Events["TransactionsConverted"].ID { // TransactionsConverted event signature + if len(log.Data) == 32 { // uint256 is 32 bytes + transactionsConverted := new(big.Int).SetBytes(log.Data) + if transactionsConverted.Uint64() != uint64(len(context.Transactions)) { + panic(fmt.Errorf("mismatch in TransactionsConverted event: expected %d, got %d", len(context.Transactions), transactionsConverted.Uint64())) + return nil, fmt.Errorf("mismatch in TransactionsConverted event: expected %d, got %d", len(context.Transactions), transactionsConverted.Uint64()) + } + } else { + return nil, fmt.Errorf("invalid data length for TransactionsConverted event") + } + break + } + } + + } else if err == nil && batch.Header.SequencerOrderNo.Uint64() > 2 { executor.logger.Crit("Bootstrapping of network failed! System contract hooks have not been initialised after genesis.") } diff --git a/go/enclave/system/hooks.go b/go/enclave/system/hooks.go index 82d4cd1c12..29f630817f 100644 --- a/go/enclave/system/hooks.go +++ b/go/enclave/system/hooks.go @@ -3,6 +3,7 @@ package system import ( "context" "fmt" + "math/big" "strings" "github.com/ethereum/go-ethereum/accounts/abi" @@ -10,8 +11,8 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" gethlog "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/rlp" "github.com/ten-protocol/go-ten/contracts/generated/TransactionsAnalyzer" + "github.com/ten-protocol/go-ten/contracts/generated/ZenBase" "github.com/ten-protocol/go-ten/go/common" "github.com/ten-protocol/go-ten/go/enclave/core" "github.com/ten-protocol/go-ten/go/enclave/storage" @@ -20,14 +21,16 @@ import ( var ( transactionsAnalyzerABI, _ = abi.JSON(strings.NewReader(TransactionsAnalyzer.TransactionsAnalyzerMetaData.ABI)) + ErrNoTransactions = fmt.Errorf("no transactions") ) type SystemContractCallbacks interface { GetOwner() gethcommon.Address Initialize(batch *core.Batch, receipts types.Receipts) error Load() error - CreateOnBatchEndTransaction(ctx context.Context, l2State *state.StateDB, batch *core.Batch, receipts common.L2Receipts) (*common.L2Tx, error) + CreateOnBatchEndTransaction(ctx context.Context, stateDB *state.StateDB, transactions common.L2Transactions, receipts types.Receipts) (*types.Transaction, error) TransactionAnalyzerAddress() *gethcommon.Address + VerifyOnBlockReceipt(transactions common.L2Transactions, receipt *types.Receipt) (bool, error) } type systemContractCallbacks struct { @@ -121,32 +124,49 @@ func (s *systemContractCallbacks) Initialize(batch *core.Batch, receipts types.R return s.initializeRequiredAddresses(addresses) } -func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Context, l2State *state.StateDB, batch *core.Batch, receipts common.L2Receipts) (*common.L2Tx, error) { +func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Context, l2State *state.StateDB, transactions common.L2Transactions, receipts types.Receipts) (*types.Transaction, error) { if s.transactionsAnalyzerAddress == nil { s.logger.Debug("CreateOnBatchEndTransaction: TransactionsAnalyzerAddress is nil, skipping transaction creation") return nil, nil } - s.logger.Info("CreateOnBatchEndTransaction: Creating transaction on batch end", "batchSeqNo", batch.SeqNo) + if len(transactions) == 0 { + s.logger.Debug("CreateOnBatchEndTransaction: Batch has no transactions, skipping transaction creation") + return nil, ErrNoTransactions + } nonceForSyntheticTx := l2State.GetNonce(s.GetOwner()) s.logger.Debug("CreateOnBatchEndTransaction: Retrieved nonce for synthetic transaction", "nonce", nonceForSyntheticTx) - blockTransactions := TransactionsAnalyzer.TransactionsAnalyzerBlockTransactions{ - Transactions: make([][]byte, 0), - } - for _, tx := range batch.Transactions { - encodedBytes, err := rlp.EncodeToBytes(tx) + solidityTransactions := make([]TransactionsAnalyzer.StructsTransaction, 0) + + for _, tx := range transactions { + // Start of Selection + transaction := TransactionsAnalyzer.StructsTransaction{ + Nonce: big.NewInt(int64(tx.Nonce())), + GasPrice: tx.GasPrice(), + GasLimit: big.NewInt(int64(tx.Gas())), + Value: tx.Value(), + Data: tx.Data(), + } + if tx.To() != nil { + transaction.To = *tx.To() + } else { + transaction.To = gethcommon.Address{} // Zero address - contract deployment + } + + sender, err := types.Sender(types.LatestSignerForChainID(tx.ChainId()), tx) if err != nil { - s.logger.Error("CreateOnBatchEndTransaction: Failed encoding transaction", "transactionHash", tx.Hash().Hex(), "error", err) - return nil, fmt.Errorf("failed encoding transaction for onBlock %w", err) + s.logger.Error("CreateOnBatchEndTransaction: Failed to recover sender address", "error", err, "transactionHash", tx.Hash().Hex()) + return nil, fmt.Errorf("failed to recover sender address: %w", err) } + transaction.From = sender - blockTransactions.Transactions = append(blockTransactions.Transactions, encodedBytes) - s.logger.Debug("CreateOnBatchEndTransaction: Encoded transaction", "transactionHash", tx.Hash().Hex()) + solidityTransactions = append(solidityTransactions, transaction) + s.logger.Debug("CreateOnBatchEndTransaction: Encoded transaction", "transactionHash", tx.Hash().Hex(), "sender", sender.Hex()) } - data, err := transactionsAnalyzerABI.Pack("onBlock", blockTransactions) + data, err := transactionsAnalyzerABI.Pack("onBlock", solidityTransactions) if err != nil { s.logger.Error("CreateOnBatchEndTransaction: Failed packing onBlock data", "error", err) return nil, fmt.Errorf("failed packing onBlock() %w", err) @@ -171,3 +191,37 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex s.logger.Info("CreateOnBatchEndTransaction: Successfully created signed transaction", "transactionHash", signedTx.Hash().Hex()) return signedTx, nil } + +func (s *systemContractCallbacks) VerifyOnBlockReceipt(transactions common.L2Transactions, receipt *types.Receipt) (bool, error) { + if receipt.Status != types.ReceiptStatusSuccessful { + s.logger.Error("VerifyOnBlockReceipt: Transaction failed", "transactionHash", receipt.TxHash.Hex()) + return false, fmt.Errorf("transaction failed") + } + + if len(receipt.Logs) == 0 { + s.logger.Error("VerifyOnBlockReceipt: Transaction has no logs", "transactionHash", receipt.TxHash.Hex()) + return false, fmt.Errorf("transaction has no logs") + } + + abi, err := ZenBase.ZenBaseMetaData.GetAbi() + if err != nil { + s.logger.Error("VerifyOnBlockReceipt: Failed to get ABI", "error", err) + return false, fmt.Errorf("failed to get ABI %w", err) + } + + for _, log := range receipt.Logs { + if log.Topics[0] != abi.Events["TransactionProcessed"].ID { + continue + } + + decodedLog, err := abi.Unpack("TransactionProcessed", log.Data) + if err != nil { + s.logger.Error("VerifyOnBlockReceipt: Failed to unpack log", "error", err, "log", log) + return false, fmt.Errorf("failed to unpack log %w", err) + } + s.logger.Debug("VerifyOnBlockReceipt: Decoded log", "log", decodedLog) + } + + s.logger.Debug("VerifyOnBlockReceipt: Transaction successful", "transactionHash", receipt.TxHash.Hex()) + return true, nil +} diff --git a/integration/simulation/validate_chain.go b/integration/simulation/validate_chain.go index c0185cce98..6295b78dab 100644 --- a/integration/simulation/validate_chain.go +++ b/integration/simulation/validate_chain.go @@ -355,16 +355,32 @@ func checkZenBaseMinting(t *testing.T, s *Simulation) { } zenBaseBalance, err := zenBaseContract.BalanceOf(&bind.CallOpts{ From: sender, - }, gethcommon.Address{}) + }, sender) if err != nil { panic(err) } expectedBalance := big.NewInt(int64(expectedMinted)) // Assuming 1 ZenBase per transaction - if zenBaseBalance.Cmp(expectedBalance) != 0 { + if zenBaseBalance.Cmp(expectedBalance) < 0 { t.Errorf("Sender %s: Expected ZenBase balance %d, but found %d", sender.Hex(), expectedBalance, zenBaseBalance) } } + + rpc := s.RPCHandles.TenWalletClient(s.Params.Wallets.L2FaucetWallet.Address(), 1) + zenBaseContract, err := ZenBase.NewZenBase(s.ZenBaseAddress, rpc) + if err != nil { + panic(err) + } + totalSupply, err := zenBaseContract.TotalSupply(&bind.CallOpts{ + From: s.Params.Wallets.L2FaucetWallet.Address(), + }) + if err != nil { + panic(err) + } + + if totalSupply.Cmp(big.NewInt(0)) <= 0 { + t.Errorf("ZenBase total supply is 0") + } } func checkBlockchainOfTenNode(t *testing.T, rpcHandles *network.RPCHandles, minTenHeight uint64, maxEthereumHeight uint64, s *Simulation, wg *sync.WaitGroup, heights []uint64, nodeIdx int) { From db1dbd6cd0518e9ecb668bbcef0ddb47739bac50 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Thu, 3 Oct 2024 14:21:05 +0300 Subject: [PATCH 06/23] Fixed linter errors. --- go/common/headers.go | 4 ++-- go/enclave/components/batch_executor.go | 9 +-------- integration/simulation/validate_chain.go | 1 - 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/go/common/headers.go b/go/common/headers.go index ce8c964ec1..39e6c4dc42 100644 --- a/go/common/headers.go +++ b/go/common/headers.go @@ -52,10 +52,10 @@ func ConvertBatchHeaderToHeader(batchHeader *BatchHeader) *types.Header { var header types.Header // Convert ParentHash if necessary - header.ParentHash = common.Hash(batchHeader.ParentHash) + header.ParentHash = batchHeader.ParentHash // Convert Root if necessary - header.Root = common.Hash(batchHeader.Root) + header.Root = batchHeader.Root // Directly assign fields that have the same type header.TxHash = batchHeader.TxHash diff --git a/go/enclave/components/batch_executor.go b/go/enclave/components/batch_executor.go index be3d00f345..3863af075f 100644 --- a/go/enclave/components/batch_executor.go +++ b/go/enclave/components/batch_executor.go @@ -222,29 +222,24 @@ func (executor *batchExecutor) ComputeBatch(ctx context.Context, context *BatchE onBlockSuccessfulTx, _, onBlockTxResult, err := executor.processTransactions(ctx, batch, len(successfulTxs), onBlockPricedTxes, stateDB, context.ChainConfig, true) if err != nil { // todo: remove once feature finished - panic(err) return nil, fmt.Errorf("could not process on block end transaction hook. Cause: %w", err) } if err = executor.verifySyntheticTransactionsSuccess(onBlockPricedTxes, onBlockSuccessfulTx, onBlockTxResult); err != nil { // todo: remove once feature finished - panic(err) return nil, fmt.Errorf("batch computation failed due to onBlock hook reverting. Cause: %w", err) } // Parse onBlockReceipt for the TransactionsConverted event abi, err := TransactionsAnalyzer.TransactionsAnalyzerMetaData.GetAbi() if err != nil { - panic(err) return nil, err } result := onBlockTxResult[0] if ok, err := executor.systemContracts.VerifyOnBlockReceipt(successfulTxs, result.Receipt); !ok || err != nil { executor.logger.Error("VerifyOnBlockReceipt failed", "error", err, "ok", ok) - panic("VerifyOnBlockReceipt failed") return nil, fmt.Errorf("VerifyOnBlockReceipt failed") } if len(result.Receipt.Logs) == 0 { - panic(fmt.Errorf("no logs in onBlockReceipt")) return nil, fmt.Errorf("no logs in onBlockReceipt") } @@ -253,7 +248,6 @@ func (executor *batchExecutor) ComputeBatch(ctx context.Context, context *BatchE if len(log.Data) == 32 { // uint256 is 32 bytes transactionsConverted := new(big.Int).SetBytes(log.Data) if transactionsConverted.Uint64() != uint64(len(context.Transactions)) { - panic(fmt.Errorf("mismatch in TransactionsConverted event: expected %d, got %d", len(context.Transactions), transactionsConverted.Uint64())) return nil, fmt.Errorf("mismatch in TransactionsConverted event: expected %d, got %d", len(context.Transactions), transactionsConverted.Uint64()) } } else { @@ -262,7 +256,6 @@ func (executor *batchExecutor) ComputeBatch(ctx context.Context, context *BatchE break } } - } else if err == nil && batch.Header.SequencerOrderNo.Uint64() > 2 { executor.logger.Crit("Bootstrapping of network failed! System contract hooks have not been initialised after genesis.") } @@ -335,7 +328,7 @@ func (executor *batchExecutor) ComputeBatch(ctx context.Context, context *BatchE trieDB := executor.storage.TrieDB() err = trieDB.Commit(h, false) - // When system contract deployment genesis batch is commited, initialize executor's addresses for the hooks. + // When system contract deployment genesis batch is committed, initialize executor's addresses for the hooks. // Further restarts will call into Load() which will take the receipts for batch number 2 (which should never be deleted) // and reinitialize them. if err == nil && batch.Header.SequencerOrderNo.Uint64() == 2 { diff --git a/integration/simulation/validate_chain.go b/integration/simulation/validate_chain.go index 6295b78dab..add73454a3 100644 --- a/integration/simulation/validate_chain.go +++ b/integration/simulation/validate_chain.go @@ -347,7 +347,6 @@ func checkZenBaseMinting(t *testing.T, s *Simulation) { // Iterate through each sender and verify ZenBase balance for sender, expectedMinted := range txCountPerSender { - senderRpc := s.RPCHandles.TenWalletClient(sender, 1) zenBaseContract, err := ZenBase.NewZenBase(s.ZenBaseAddress, senderRpc) if err != nil { From daa38b065e4437476f16cfdb56217c7e2ef3fb1f Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Thu, 3 Oct 2024 14:34:59 +0300 Subject: [PATCH 07/23] Fixed tenscan tests. --- integration/simulation/validate_chain.go | 6 +++--- integration/tenscan/tenscan_test.go | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/integration/simulation/validate_chain.go b/integration/simulation/validate_chain.go index add73454a3..4c2f3bbd67 100644 --- a/integration/simulation/validate_chain.go +++ b/integration/simulation/validate_chain.go @@ -350,13 +350,13 @@ func checkZenBaseMinting(t *testing.T, s *Simulation) { senderRpc := s.RPCHandles.TenWalletClient(sender, 1) zenBaseContract, err := ZenBase.NewZenBase(s.ZenBaseAddress, senderRpc) if err != nil { - panic(err) + t.Errorf("Sender %s: Failed to create ZenBase contract. Cause: %s", sender.Hex(), err) } zenBaseBalance, err := zenBaseContract.BalanceOf(&bind.CallOpts{ From: sender, }, sender) if err != nil { - panic(err) + t.Errorf("Sender %s: Failed to get ZenBase balance. Cause: %s", sender.Hex(), err) } expectedBalance := big.NewInt(int64(expectedMinted)) // Assuming 1 ZenBase per transaction @@ -368,7 +368,7 @@ func checkZenBaseMinting(t *testing.T, s *Simulation) { rpc := s.RPCHandles.TenWalletClient(s.Params.Wallets.L2FaucetWallet.Address(), 1) zenBaseContract, err := ZenBase.NewZenBase(s.ZenBaseAddress, rpc) if err != nil { - panic(err) + t.Errorf("Failed to create ZenBase contract. Cause: %s", err) } totalSupply, err := zenBaseContract.TotalSupply(&bind.CallOpts{ From: s.Params.Wallets.L2FaucetWallet.Address(), diff --git a/integration/tenscan/tenscan_test.go b/integration/tenscan/tenscan_test.go index 0ddb67a3ac..ae411c6d12 100644 --- a/integration/tenscan/tenscan_test.go +++ b/integration/tenscan/tenscan_test.go @@ -82,12 +82,12 @@ func TestTenscan(t *testing.T) { statusCode, body, err := fasthttp.Get(nil, fmt.Sprintf("%s/count/contracts/", serverAddress)) assert.NoError(t, err) assert.Equal(t, 200, statusCode) - assert.Equal(t, "{\"count\":1}", string(body)) + assert.Equal(t, "{\"count\":5}", string(body)) statusCode, body, err = fasthttp.Get(nil, fmt.Sprintf("%s/count/transactions/", serverAddress)) assert.NoError(t, err) assert.Equal(t, 200, statusCode) - assert.Equal(t, "{\"count\":6}", string(body)) + assert.Equal(t, "{\"count\":7}", string(body)) statusCode, body, err = fasthttp.Get(nil, fmt.Sprintf("%s/items/batch/latest/", serverAddress)) assert.NoError(t, err) @@ -121,8 +121,8 @@ func TestTenscan(t *testing.T) { publicTxsObj := publicTxsRes{} err = json.Unmarshal(body, &publicTxsObj) assert.NoError(t, err) - assert.Equal(t, 6, len(publicTxsObj.Result.TransactionsData)) - assert.Equal(t, uint64(6), publicTxsObj.Result.Total) + assert.Equal(t, 7, len(publicTxsObj.Result.TransactionsData)) + assert.Equal(t, uint64(7), publicTxsObj.Result.Total) statusCode, body, err = fasthttp.Get(nil, fmt.Sprintf("%s/items/batches/?offset=0&size=10", serverAddress)) assert.NoError(t, err) From f4b68bdce50682712b2e0c6f8d77f5bbc50f6c4d Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Thu, 3 Oct 2024 14:45:53 +0300 Subject: [PATCH 08/23] Fixed linter. --- go/obsclient/authclient.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/go/obsclient/authclient.go b/go/obsclient/authclient.go index a5f7591c98..69fe714dc1 100644 --- a/go/obsclient/authclient.go +++ b/go/obsclient/authclient.go @@ -261,8 +261,6 @@ func (ac *AuthObsClient) CodeAt(ctx context.Context, address gethcommon.Address, } func (ac *AuthObsClient) FilterLogs(context.Context, ethereum.FilterQuery) ([]types.Log, error) { - panic("not implemented") - return nil, errors.New("not implemented") } From feb9e320bab9ac554e23e563e3a0b3360b9beec9 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 7 Oct 2024 12:12:59 +0300 Subject: [PATCH 09/23] Removed viaIR option from the solidity compiler config in hardhat. --- contracts/generated/Address/Address.go | 2 +- contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go | 2 +- contracts/generated/CrossChainMessenger/CrossChainMessenger.go | 2 +- contracts/generated/ECDSA/ECDSA.go | 2 +- contracts/generated/ERC1967Proxy/ERC1967Proxy.go | 2 +- contracts/generated/ERC1967Utils/ERC1967Utils.go | 2 +- contracts/generated/EthereumBridge/EthereumBridge.go | 2 +- contracts/generated/GasConsumerBalance/GasConsumerBalance.go | 2 +- contracts/generated/Logger/Logger.go | 2 +- contracts/generated/ManagementContract/ManagementContract.go | 2 +- contracts/generated/Math/Math.go | 2 +- contracts/generated/MerkleProof/MerkleProof.go | 2 +- .../generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go | 2 +- contracts/generated/MessageBus/MessageBus.go | 2 +- contracts/generated/ObsERC20/ObsERC20.go | 2 +- contracts/generated/ObscuroBridge/ObscuroBridge.go | 2 +- contracts/generated/ProxyAdmin/ProxyAdmin.go | 2 +- contracts/generated/SafeERC20/SafeERC20.go | 2 +- contracts/generated/Strings/Strings.go | 2 +- contracts/generated/SystemDeployer/SystemDeployer.go | 2 +- .../generated/TransactionsAnalyzer/TransactionsAnalyzer.go | 2 +- .../TransparentUpgradeableProxy/TransparentUpgradeableProxy.go | 2 +- contracts/generated/WrappedERC20/WrappedERC20.go | 2 +- contracts/generated/ZenBase/ZenBase.go | 2 +- contracts/hardhat.config.ts | 1 - 25 files changed, 24 insertions(+), 25 deletions(-) diff --git a/contracts/generated/Address/Address.go b/contracts/generated/Address/Address.go index 3623ac7a0f..e7fe56cf12 100644 --- a/contracts/generated/Address/Address.go +++ b/contracts/generated/Address/Address.go @@ -32,7 +32,7 @@ var ( // AddressMetaData contains all meta data concerning the Address contract. var AddressMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}]", - Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea264697066735822122001eed81e72a11a099b903c792c3e8a8228cdcfe17b57150dc23e2623905b92e464736f6c63430008140033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122071923496e8dc037afc52f2cd62212c1969857e590755963b8b4983d40c3bb00864736f6c63430008140033", } // AddressABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go b/contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go index 3188536282..f23a967743 100644 --- a/contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go +++ b/contracts/generated/ConstantSupplyERC20/ConstantSupplyERC20.go @@ -32,7 +32,7 @@ var ( // ConstantSupplyERC20MetaData contains all meta data concerning the ConstantSupplyERC20 contract. var ConstantSupplyERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"initialSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523462000031576200001f6200001862000183565b91620001ab565b6040516109f8620006de82396109f890f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160401b0381116200006e57602090601f01601f19160190565b60005b838110620000be5750506000910152565b8181015183820152602001620000ad565b90929192620000e8620000e2826200008d565b62000074565b9381855260208501908284011162000031576200008b92620000aa565b9080601f83011215620000315781516200012292602001620000cf565b90565b9091606082840312620000315781516001600160401b0381116200003157836200015191840162000105565b602083015190936001600160401b038211620000315762000179816200012293860162000105565b9360400190505190565b620001a6620010d6803803806200019a8162000074565b92833981019062000125565b909192565b6200008b9291620001bc91620003c4565b3362000426565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620001fc575b6020831014620001f657565b620001c3565b91607f1691620001ea565b9160001960089290920291821b911b5b9181191691161790565b6200012262000122620001229290565b919062000246620001226200024f9362000221565b90835462000207565b9055565b6200008b9160009162000231565b8181106200026d575050565b806200027d600060019362000253565b0162000261565b9190601f81116200029457505050565b620002a86200008b93600052602060002090565b906020601f840181900483019310620002cc575b6020601f90910104019062000261565b9091508190620002bc565b90620002e1815190565b906001600160401b0382116200006e576200030982620003028554620001d9565b8562000284565b602090601f831160011462000348576200024f9291600091836200033c575b5050600019600883021c1916906002021790565b01519050388062000328565b601f198316916200035e85600052602060002090565b9260005b8181106200039f5750916002939185600196941062000385575b50505002019055565b01516000196008601f8516021c191690553880806200037c565b9193602060018192878701518155019501920162000362565b906200008b91620002d7565b90620003d66200008b926003620003b8565b6004620003b8565b620003ee62000122620001229290565b6001600160a01b031690565b6200012290620003de565b6200041090620003ee565b9052565b6020810192916200008b919062000405565b9190620004346000620003fa565b926200044084620003ee565b6200044b82620003ee565b146200045d576200008b929362000561565b62000483846200046c60405190565b63ec442f0560e01b81529182916004830162000414565b0390fd5b6200012290620003ee906001600160a01b031682565b620001229062000487565b62000122906200049d565b90620004bf90620004a8565b600052602052604060002090565b620001229081565b620001229054620004cd565b6040906200050c6200008b9496959396620005056060840198600085019062000405565b6020830152565b0152565b906000199062000217565b906200052f620001226200024f9262000221565b825462000510565b634e487b7160e01b600052601160045260246000fd5b919082018092116200055b57565b62000537565b8160006200056f81620003fa565b6200057a81620003ee565b6200058585620003ee565b036200066e57620005b990620005b3620005ab88620005a56002620004d5565b6200054d565b60026200051b565b620003ee565b620005c483620003ee565b036200063d575050620005e5620005ab84620005e16002620004d5565b0390565b6200063862000620620006197fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef93620004a8565b93620004a8565b936200062b60405190565b9182918290815260200190565b0390a3565b62000668916200064d91620004b3565b62000661856200065d83620004d5565b0190565b906200051b565b620005e5565b90915062000687620006818484620004b3565b620004d5565b858110620006b657849291620005b3620006a488620005b9940390565b620006b08786620004b3565b6200051b565b836200048387620006c660405190565b63391434e360e21b815293849360048501620004e156fe6080604052600436101561001257600080fd5b60003560e01c806306fdde03146100a2578063095ea7b31461009d57806318160ddd1461009857806323b872dd14610093578063313ce5671461008e57806370a082311461008957806395d89b4114610084578063a9059cbb1461007f5763dd62ed3e036100b257610312565b6102d3565b6102b8565b61029d565b61025a565b61023e565b6101e2565b6101b4565b610126565b60009103126100b257565b600080fd5b60005b8381106100ca5750506000910152565b81810151838201526020016100ba565b6100fb61010460209361010e936100ef815190565b80835293849260200190565b958691016100b7565b601f01601f191690565b0190565b6020808252610123929101906100da565b90565b346100b2576101363660046100a7565b61014d610141610463565b60405191829182610112565b0390f35b6001600160a01b031690565b6001600160a01b0381165b036100b257565b9050359061017c8261015d565b565b80610168565b9050359061017c8261017e565b91906040838203126100b257610123906101ab818561016f565b93602001610184565b346100b25761014d6101d06101ca366004610191565b90610540565b60405191829182901515815260200190565b346100b2576101f23660046100a7565b61014d6101fd6104a5565b6040515b9182918290815260200190565b90916060828403126100b257610123610227848461016f565b93610235816020860161016f565b93604001610184565b346100b25761014d6101d061025436600461020e565b9161054b565b346100b25761026a3660046100a7565b61014d61027561048a565b6040519182918260ff909116815260200190565b906020828203126100b2576101239161016f565b346100b25761014d6101fd6102b3366004610289565b6104ef565b346100b2576102c83660046100a7565b61014d61014161046d565b346100b25761014d6101d06102e9366004610191565b9061050b565b91906040838203126100b25761012390610309818561016f565b9360200161016f565b346100b25761014d6101fd6103283660046102ef565b90610520565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610364575b602083101461035f57565b61032e565b91607f1691610354565b8054600093929161038b61038183610344565b8085529360200190565b91600181169081156103dd57506001146103a457505050565b6103b79192939450600052602060002090565b916000925b8184106103c95750500190565b8054848401526020909301926001016103bc565b92949550505060ff1916825215156020020190565b906101239161036e565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761043457604052565b6103fc565b9061017c6104539261044a60405190565b938480926103f2565b0383610412565b61012390610439565b610123600361045a565b610123600461045a565b6104846101236101239290565b60ff1690565b6101236012610477565b6101239081565b6101239054610494565b610123600261049b565b610151610123610123926001600160a01b031690565b610123906104af565b610123906104c5565b906104e1906104ce565b600052602052604060002090565b610506610123916104fe600090565b5060006104d7565b61049b565b61051b919033610572565b610572565b600190565b6101239161053b61050692610533600090565b5060016104d7565b6104d7565b61051b919033610814565b61051b92919061051683338361093e565b6101516101236101239290565b6101239061055c565b92919061057f6000610569565b936001600160a01b0385166001600160a01b0382161461060b576001600160a01b0385166001600160a01b038316146105bd5761017c9394506106c9565b610607856105ca60405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6106078561061860405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6001600160a01b03909116815260608101939261017c92909160409161067c906020830152565b0152565b6101236101236101239290565b9061012361012361069d92610680565b9055565b634e487b7160e01b600052601160045260246000fd5b919082018092116106c457565b6106a1565b8160006106d581610569565b6001600160a01b0381166001600160a01b0385160361079f5761070f9061015161070888610703600261049b565b6106b7565b600261068d565b6001600160a01b0383160361077a57505061073561070884610731600261049b565b0390565b61077561076b6107657fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef936104ce565b936104ce565b9361020160405190565b0390a3565b61079a91610787916104d7565b6107948561010e8361049b565b9061068d565b610735565b9091506107af61050684846104d7565b8581106107d7578492916101516107c88861070f940390565b6107d287866104d7565b61068d565b83610607876107e560405190565b9384937fe450d38c00000000000000000000000000000000000000000000000000000000855260048501610655565b909161017c926001925b90919261082b6000610569565b6001600160a01b0381166001600160a01b038416146108f4576001600160a01b0381166001600160a01b038516146108aa5750610871846107d28561053b8660016104d7565b61087a57505050565b61077561076b6107657f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925936104ce565b610607906108b760405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6106079061090160405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b9092919261094c8183610520565b93600019850361095e575b5050509050565b808510610984576109729061097b94950390565b9060009261081e565b80388080610957565b90610607859261099360405190565b9384937ffb8f41b20000000000000000000000000000000000000000000000000000000085526004850161065556fea26469706673582212206c5fbc4c274c1d9b437e400eeb4b616e6aa1bcff9af56e0a9b15e71aada6082664736f6c63430008140033", + Bin: "0x60806040523480156200001157600080fd5b5060405162000ebb38038062000ebb833981016040819052620000349162000312565b8282600362000044838262000497565b50600462000053828262000497565b5050506200006833826200007160201b60201c565b50505062000607565b6001600160a01b038216620000a757600060405163ec442f0560e01b81526004016200009e919062000586565b60405180910390fd5b620000b560008383620000b9565b5050565b6001600160a01b038316620000e8578060026000828254620000dc9190620005ac565b909155506200014a9050565b6001600160a01b038316600090815260208190526040902054818110156200012b5783818360405163391434e360e21b81526004016200009e93929190620005c9565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620001685760028054829003905562000187565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001cc9190620005f7565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620002175762000217620001d9565b6040525050565b60006200022a60405190565b9050620002388282620001ef565b919050565b60006001600160401b03821115620002595762000259620001d9565b601f19601f83011660200192915050565b60005b83811015620002875781810151838201526020016200026d565b50506000910152565b6000620002a7620002a1846200023d565b6200021e565b905082815260208101848484011115620002c457620002c4600080fd5b620002d18482856200026a565b509392505050565b600082601f830112620002ef57620002ef600080fd5b81516200030184826020860162000290565b949350505050565b80515b92915050565b6000806000606084860312156200032c576200032c600080fd5b83516001600160401b03811115620003475762000347600080fd5b6200035586828701620002d9565b602086015190945090506001600160401b03811115620003785762000378600080fd5b6200038686828701620002d9565b9250506040620003998682870162000309565b9150509250925092565b634e487b7160e01b600052602260045260246000fd5b600281046001821680620003ce57607f821691505b602082108103620003e357620003e3620003a3565b50919050565b60006200030c620003f78381565b90565b6200040583620003e9565b815460001960089490940293841b1916921b91909117905550565b60006200042f818484620003fa565b505050565b81811015620000b5576200044a60008262000420565b60010162000434565b601f8211156200042f576000818152602090206020601f850104810160208510156200047c5750805b620004906020601f86010483018262000434565b5050505050565b81516001600160401b03811115620004b357620004b3620001d9565b620004bf8254620003b9565b620004cc82828562000453565b506020601f821160018114620005045760008315620004eb5750848201515b600019600885021c198116600285021785555062000490565b600084815260208120601f198516915b8281101562000536578785015182556020948501946001909201910162000514565b5084821015620005545783870151600019601f87166008021c191681555b50505050600202600101905550565b60006001600160a01b0382166200030c565b620005808162000563565b82525050565b602081016200030c828462000575565b634e487b7160e01b600052601160045260246000fd5b808201808211156200030c576200030c62000596565b8062000580565b60608101620005d9828662000575565b620005e86020830185620005c2565b620003016040830184620005c2565b602081016200030c8284620005c2565b6108a480620006176000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b4114610142578063a9059cbb1461014a578063dd62ed3e1461015d57600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b0610196565b6040516100bd919061063c565b60405180910390f35b6100d96100d4366004610698565b610228565b6040516100bd91906106df565b6002545b6040516100bd91906106f3565b6100d9610105366004610701565b610242565b60126040516100bd919061075a565b6100ea610127366004610768565b6001600160a01b031660009081526020819052604090205490565b6100b0610266565b6100d9610158366004610698565b610275565b6100ea61016b366004610791565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101a5906107da565b80601f01602080910402602001604051908101604052809291908181526020018280546101d1906107da565b801561021e5780601f106101f35761010080835404028352916020019161021e565b820191906000526020600020905b81548152906001019060200180831161020157829003601f168201915b5050505050905090565b600033610236818585610283565b60019150505b92915050565b600033610250858285610295565b61025b858585610322565b506001949350505050565b6060600480546101a5906107da565b600033610236818585610322565b61029083838360016103b3565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461031c578181101561030d578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016103049392919061080f565b60405180910390fd5b61031c848484840360006103b3565b50505050565b6001600160a01b0383166103655760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103049190610837565b6001600160a01b0382166103a85760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016103049190610837565b6102908383836104b8565b6001600160a01b0384166103f65760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103049190610837565b6001600160a01b0383166104395760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103049190610837565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561031c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104aa91906106f3565b60405180910390a350505050565b6001600160a01b0383166104e35780600260008282546104d8919061085b565b9091555061055b9050565b6001600160a01b0383166000908152602081905260409020548181101561053c578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016103049392919061080f565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661057757600280548290039055610596565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105d991906106f3565b60405180910390a3505050565b60005b838110156106015781810151838201526020016105e9565b50506000910152565b6000610614825190565b80845260208401935061062b8185602086016105e6565b601f01601f19169290920192915050565b6020808252810161064d818461060a565b9392505050565b60006001600160a01b03821661023c565b61066e81610654565b811461067957600080fd5b50565b803561023c81610665565b8061066e565b803561023c81610687565b600080604083850312156106ae576106ae600080fd5b60006106ba858561067c565b92505060206106cb8582860161068d565b9150509250929050565b8015155b82525050565b6020810161023c82846106d5565b806106d9565b6020810161023c82846106ed565b60008060006060848603121561071957610719600080fd5b6000610725868661067c565b93505060206107368682870161067c565b92505060406107478682870161068d565b9150509250925092565b60ff81166106d9565b6020810161023c8284610751565b60006020828403121561077d5761077d600080fd5b6000610789848461067c565b949350505050565b600080604083850312156107a7576107a7600080fd5b60006107b3858561067c565b92505060206106cb8582860161067c565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806107ee57607f821691505b602082108103610800576108006107c4565b50919050565b6106d981610654565b6060810161081d8286610806565b61082a60208301856106ed565b61078960408301846106ed565b6020810161023c8284610806565b634e487b7160e01b600052601160045260246000fd5b8082018082111561023c5761023c61084556fea26469706673582212202d779dff7fe9ec7ab0604366da8ad9497916e439b37454dbdbc1f22c4e6aa1fb64736f6c63430008140033", } // ConstantSupplyERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/CrossChainMessenger/CrossChainMessenger.go b/contracts/generated/CrossChainMessenger/CrossChainMessenger.go index af8f62f67e..e70de298dd 100644 --- a/contracts/generated/CrossChainMessenger/CrossChainMessenger.go +++ b/contracts/generated/CrossChainMessenger/CrossChainMessenger.go @@ -42,7 +42,7 @@ type StructsCrossChainMessage struct { // CrossChainMessengerMetaData contains all meta data concerning the CrossChainMessenger contract. var CrossChainMessengerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"crossChainSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"encodeCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messageBusAddr\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"relayMessageWithProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523461001a57604051610ebe6100208239610ebe90f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630671b22e146100725780635b76f28b1461006d57806363012de5146100685780639b7cf1ee14610063578063a1a227fa1461005e5763c4d66de80361008557610353565b610324565b61030c565b6102b1565b61024f565b61012c565b908160c09103126100855790565b600080fd5b909182601f830112156100855781359167ffffffffffffffff831161008557602001926020830284011161008557565b805b0361008557565b905035906100d0826100ba565b565b9060608282031261008557813567ffffffffffffffff811161008557816100fa918401610077565b92602083013567ffffffffffffffff81116100855761011e8361012992860161008a565b9390946040016100c3565b90565b346100855761014861013f3660046100d2565b92919091610d6f565b604051005b0390f35b6001600160a01b031690565b6001600160a01b0381166100bc565b905035906100d08261015d565b909182601f830112156100855781359167ffffffffffffffff831161008557602001926001830284011161008557565b919091604081840312610085576101c0838261016c565b92602082013567ffffffffffffffff8111610085576101df9201610179565b9091565b60005b8381106101f65750506000910152565b81810151838201526020016101e6565b61022761023060209361023a9361021b815190565b80835293849260200190565b958691016101e3565b601f01601f191690565b0190565b602080825261012992910190610206565b346100855761014d61026b6102653660046101a9565b91610793565b6040519182918261023e565b600091031261008557565b610129916008021c6001600160a01b031690565b906101299154610282565b61012960006001610296565b9052565b34610085576102c1366004610277565b61014d6102cc6102a1565b604051918291826001600160a01b03909116815260200190565b9060208282031261008557813567ffffffffffffffff8111610085576101299201610077565b346100855761014861031f3660046102e6565b61091c565b3461008557610334366004610277565b61014d6102cc610663565b90602082820312610085576101299161016c565b346100855761014861036636600461033f565b610647565b6101299060401c5b60ff1690565b610129905461036b565b610129905b67ffffffffffffffff1690565b6101299054610383565b6103886101296101299290565b610151610129610129926001600160a01b031690565b610129906103ac565b610129906103c2565b6101296101296101299290565b9067ffffffffffffffff905b9181191691161790565b6103886101296101299267ffffffffffffffff1690565b9061041e610129610425926103f7565b82546103e1565b9055565b9068ff00000000000000009060401b6103ed565b9061044d61012961042592151590565b8254610429565b6102ad9061039f565b6020810192916100d09190610454565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081906104aa6104a46104a084610379565b1590565b93610395565b926000916104b78361039f565b67ffffffffffffffff861614806105dd575b6001956104e66104d88861039f565b9167ffffffffffffffff1690565b1490816105b5575b155b90816105ac575b5061057d5761052090826105178561050e8961039f565b9701968761040e565b61056e57610620565b61052957505050565b6105329161043d565b6105697fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29161056060405190565b9182918261045d565b0390a1565b610578868661043d565b610620565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b159050386104f7565b90506104f06105c3306103cb565b3b6105d46105d0876103d4565b9190565b149190506104ee565b50816104c9565b906001600160a01b03906103ed565b90610603610129610425926103cb565b82546105e4565b6101516101296101299290565b6101299061060a565b61062c610633916103cb565b60006105f3565b6100d06106406000610617565b60016105f3565b6100d09061046d565b61012990610151565b6101299054610650565b6101296106706000610659565b6103cb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff8211176106c657604052565b610675565b906100d06106d860405190565b92836106a4565b61012960606106cb565b67ffffffffffffffff81116106c657602090601f01601f19160190565b90826000939282370152565b90929192610727610722826106e9565b6106cb565b93818552602085019082840111610085576100d092610706565b610129913691610712565b80516001600160a01b03168252906101299060408061077a6060840160208701518582036020870152610206565b940151910152565b60208082526101299291019061074c565b916107e2916107d66107cf6107db936107aa606090565b506000936107ca6107b96106df565b6001600160a01b03909916868a0152565b610741565b6020860152565b6103d4565b6040830152565b6101296107ee60405190565b80926107fe602083019182610782565b908103825203826106a4565b356101298161015d565b903590601e193682900301821215610085570180359067ffffffffffffffff8211610085576020019136829003831361008557565b9080601f830112156100855781602061012993359101610712565b9190916060818403126100855761087b60606106cb565b926000610888828461016c565b9085015260208201359067ffffffffffffffff8211610085576108b0816108bf938501610849565b602086015260408093016100c3565b90830152565b9060208282031261008557813567ffffffffffffffff8111610085576101299201610864565b906108f8610722836106e9565b918252565b3d156109175761090c3d6108eb565b903d6000602084013e565b606090565b600061094f610947829361092f81610c68565b61093d61064085830161080a565b6080810190610814565b8101906108c5565b808201516001600160a01b03168260205a9301519160208301925193f161097c6109776108fd565b911590565b61098e57506100d06106406000610617565b6105a89061099b60405190565b9182917fa5fa8d2b0000000000000000000000000000000000000000000000000000000083526004830161023e565b8015156100bc565b905051906100d0826109ca565b9060208282031261008557610129916109d2565b5061012990602081019061016c565b67ffffffffffffffff81166100bc565b905035906100d082610a02565b50610129906020810190610a12565b63ffffffff81166100bc565b905035906100d082610a2e565b50610129906020810190610a3a565b9035601e19368390030181121561008557016020813591019167ffffffffffffffff82116100855736829003831361008557565b919061023081610aa18161023a9560209181520190565b8095610706565b60ff81166100bc565b905035906100d082610aa8565b50610129906020810190610ab1565b906101299060a0610b78610b6e60c08401610af8610aeb88806109f3565b6001600160a01b03168652565b610b19610b086020890189610a1f565b67ffffffffffffffff166020870152565b610b36610b296040890189610a47565b63ffffffff166040870152565b610b53610b466060890189610a47565b63ffffffff166060870152565b610b606080880188610a56565b908683036080880152610a8a565b9482810190610abe565b60ff16910152565b602080825261012992910190610acd565b6040513d6000823e3d90fd5b15610ba457565b60405162461bcd60e51b815260206004820152601f60248201527f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e006044820152606490fd5b61012990610373565b6101299054610be9565b15610c0357565b60405162461bcd60e51b815260206004820152601960248201527f4d65737361676520616c726561647920636f6e73756d65642e000000000000006044820152606490fd5b9060ff906103ed565b90610c6161012961042592151590565b8254610c48565b610c99906020610c816106706106706106706000610659565b6333a88c7290610c9060405190565b94859260e01b90565b82528180610caa8660048301610b80565b03915afa918215610d6a576100d092610ccb91600091610d3c575b50610b9d565b610ce7610cd760405190565b80926107fe602083019182610b80565b610cf9610cf2825190565b9160200190565b20610d37600291610d25610d1f610d1a838690600052602052604060002090565b610bf2565b15610bfc565b60019290600052602052604060002090565b610c51565b610d5d915060203d8111610d63575b610d5581836106a4565b8101906109df565b38610cc5565b503d610d4b565b610b91565b6109479061092f600095869561094f9584610e00565b9037565b8183529091602001917f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610085578291602061023a9202938491610d85565b949391610dfb906100d094610ded60409460608a01908a820360008c0152610acd565b9188830360208a0152610d89565b940152565b919290610e106106706000610659565b63e138a8d292813b1561008557600093610e49610e3d92610e3060405190565b9889968795869560e01b90565b85528960048601610dca565b03915afa918215610d6a576100d092610e6a575b50610ce7610cd760405190565b610e82906000610e7a81836106a4565b810190610277565b38610e5d56fea2646970667358221220b27baaacdc39ed39faed52c288adf1bc50f7caaff3a867818c79b836de0436a664736f6c63430008140033", + Bin: "0x608060405234801561001057600080fd5b50610ff9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80639b7cf1ee116100505780639b7cf1ee146100d5578063a1a227fa146100e8578063c4d66de8146100f957600080fd5b80630671b22e146100775780635b76f28b1461008c57806363012de5146100b5575b600080fd5b61008a61008536600461078b565b61010c565b005b61009f61009a366004610885565b610211565b6040516100ac9190610937565b60405180910390f35b6001546100c8906001600160a01b031681565b6040516100ac919061095e565b61008a6100e336600461096c565b610291565b6000546001600160a01b03166100c8565b61008a6101073660046109af565b610387565b610118848484846104e7565b61012560208501856109af565b600180546001600160a01b0319166001600160a01b0392909216919091179055600061015460808601866109d0565b8101906101619190610bb1565b905060008082600001516001600160a01b03165a84602001516040516101879190610c0e565b60006040518083038160008787f1925050503d80600081146101c5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ca565b606091505b5091509150816101f8578060405163a5fa8d2b60e01b81526004016101ef9190610937565b60405180910390fd5b5050600180546001600160a01b03191690555050505050565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602091820152604051610279929101610c5f565b60405160208183030381529060405290509392505050565b61029a816105e0565b6102a760208201826109af565b600180546001600160a01b0319166001600160a01b039290921691909117905560006102d660808301836109d0565b8101906102e39190610bb1565b905060008082600001516001600160a01b03165a84602001516040516103099190610c0e565b60006040518083038160008787f1925050503d8060008114610347576040519150601f19603f3d011682016040523d82523d6000602084013e61034c565b606091505b509150915081610371578060405163a5fa8d2b60e01b81526004016101ef9190610937565b5050600180546001600160a01b03191690555050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103d25750825b905060008267ffffffffffffffff1660011480156103ef5750303b155b9050811580156103fd575080155b15610434576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561046857845468ff00000000000000001916680100000000000000001785555b600080546001600160a01b0388166001600160a01b03199182161790915560018054909116905583156104df57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906104d690600190610c8b565b60405180910390a15b505050505050565b6000546040517fe138a8d20000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063e138a8d290610536908790879087908790600401610eba565b60006040518083038186803b15801561054e57600080fd5b505afa158015610562573d6000803e3d6000fd5b505050506000846040516020016105799190610ef8565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156105c15760405162461bcd60e51b81526004016101ef90610f3d565b6000908152600260205260409020805460ff1916600117905550505050565b6000546040517f33a88c720000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906333a88c7290610629908490600401610ef8565b602060405180830381865afa158015610646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066a9190610f60565b6106865760405162461bcd60e51b81526004016101ef90610fb3565b6000816040516020016106999190610ef8565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff16156106e15760405162461bcd60e51b81526004016101ef90610f3d565b6000908152600260205260409020805460ff1916600117905550565b600060c0828403121561071257610712600080fd5b50919050565b60008083601f84011261072d5761072d600080fd5b50813567ffffffffffffffff81111561074857610748600080fd5b60208301915083602082028301111561076357610763600080fd5b9250929050565b805b811461077757600080fd5b50565b80356107858161076a565b92915050565b600080600080606085870312156107a4576107a4600080fd5b843567ffffffffffffffff8111156107be576107be600080fd5b6107ca878288016106fd565b945050602085013567ffffffffffffffff8111156107ea576107ea600080fd5b6107f687828801610718565b935093505060406108098782880161077a565b91505092959194509250565b60006001600160a01b038216610785565b61076c81610815565b803561078581610826565b60008083601f84011261084f5761084f600080fd5b50813567ffffffffffffffff81111561086a5761086a600080fd5b60208301915083600182028301111561076357610763600080fd5b60008060006040848603121561089d5761089d600080fd5b60006108a9868661082f565b935050602084013567ffffffffffffffff8111156108c9576108c9600080fd5b6108d58682870161083a565b92509250509250925092565b60005b838110156108fc5781810151838201526020016108e4565b50506000910152565b600061090f825190565b8084526020840193506109268185602086016108e1565b601f01601f19169290920192915050565b602080825281016109488184610905565b9392505050565b61095881610815565b82525050565b60208101610785828461094f565b60006020828403121561098157610981600080fd5b813567ffffffffffffffff81111561099b5761099b600080fd5b6109a7848285016106fd565b949350505050565b6000602082840312156109c4576109c4600080fd5b60006109a7848461082f565b6000808335601e19368590030181126109eb576109eb600080fd5b8301915050803567ffffffffffffffff811115610a0a57610a0a600080fd5b60208201915060018102360382131561076357610763600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715610a7a57610a7a610a25565b6040525050565b6000610a8c60405190565b9050610a988282610a54565b919050565b600067ffffffffffffffff821115610ab757610ab7610a25565b601f19601f83011660200192915050565b82818337506000910152565b6000610ae7610ae284610a9d565b610a81565b905082815260208101848484011115610b0257610b02600080fd5b610b0d848285610ac8565b509392505050565b600082601f830112610b2957610b29600080fd5b81356109a7848260208601610ad4565b600060608284031215610b4e57610b4e600080fd5b610b586060610a81565b90506000610b66848461082f565b90820152602082013567ffffffffffffffff811115610b8757610b87600080fd5b610b9384828501610b15565b6020830152506040610ba78482850161077a565b9082015292915050565b600060208284031215610bc657610bc6600080fd5b813567ffffffffffffffff811115610be057610be0600080fd5b6109a784828501610b39565b6000610bf6825190565b610c048185602086016108e1565b9290920192915050565b6107858183610bec565b80610958565b80516000906060840190610c32858261094f565b5060208301518482036020860152610c4a8282610905565b9150506040830151610b0d6040860182610c18565b602080825281016109488184610c1e565b600067ffffffffffffffff8216610785565b61095881610c70565b602081016107858284610c82565b506000610785602083018361082f565b67ffffffffffffffff811661076c565b803561078581610ca9565b5060006107856020830183610cb9565b67ffffffffffffffff8116610958565b63ffffffff811661076c565b803561078581610ce4565b5060006107856020830183610cf0565b63ffffffff8116610958565b6000808335601e1936859003018112610d3257610d32600080fd5b830160208101925035905067ffffffffffffffff811115610d5557610d55600080fd5b3681900382131561076357610763600080fd5b818352602083019250610d7c828483610ac8565b50601f01601f19160190565b60ff811661076c565b803561078581610d88565b5060006107856020830183610d91565b60ff8116610958565b600060c08301610dc58380610c99565b610dcf858261094f565b50610ddd6020840184610cc4565b610dea6020860182610cd4565b50610df86040840184610cfb565b610e056040860182610d0b565b50610e136060840184610cfb565b610e206060860182610d0b565b50610e2e6080840184610d17565b8583036080870152610e41838284610d68565b92505050610e5260a0840184610d9c565b610b0d60a0860182610dac565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115610ea357610ea3600080fd5b602083029250610eb4838584610e5f565b50500190565b60608082528101610ecb8187610db5565b90508181036020830152610ee0818587610e68565b9050610eef6040830184610c18565b95945050505050565b602080825281016109488184610db5565b60198152602081017f4d65737361676520616c726561647920636f6e73756d65642e00000000000000815290505b60200190565b6020808252810161078581610f09565b80151561076c565b805161078581610f4d565b600060208284031215610f7557610f75600080fd5b60006109a78484610f55565b601f8152602081017f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0081529050610f37565b6020808252810161078581610f8156fea2646970667358221220b19a157d54d31fc9b484675b1b5bbc3bb2bcb9f0cf90b7e3cf4c7fd69e2d0bad64736f6c63430008140033", } // CrossChainMessengerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ECDSA/ECDSA.go b/contracts/generated/ECDSA/ECDSA.go index 902e50c170..3be7c4b73e 100644 --- a/contracts/generated/ECDSA/ECDSA.go +++ b/contracts/generated/ECDSA/ECDSA.go @@ -32,7 +32,7 @@ var ( // ECDSAMetaData contains all meta data concerning the ECDSA contract. var ECDSAMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"}]", - Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea26469706673582212201c5c53aabc0b3c531c2c849b15f6469610b0a5a84593a55b133749726edf62a364736f6c63430008140033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bed6531959ba38008e9f9a5d2707c1ef562c27a99949f9835dc4d5d47d0cf1e764736f6c63430008140033", } // ECDSAABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ERC1967Proxy/ERC1967Proxy.go b/contracts/generated/ERC1967Proxy/ERC1967Proxy.go index 91bad8e577..b7388044d1 100644 --- a/contracts/generated/ERC1967Proxy/ERC1967Proxy.go +++ b/contracts/generated/ERC1967Proxy/ERC1967Proxy.go @@ -32,7 +32,7 @@ var ( // ERC1967ProxyMetaData contains all meta data concerning the ERC1967Proxy contract. var ERC1967ProxyMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}]", - Bin: "0x608060405261001561000f610167565b90610189565b60405160d0610406823960d090f35b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761005b57604052565b610024565b9061007461006d60405190565b928361003a565b565b6001600160a01b031690565b90565b6001600160a01b0381160361009657565b600080fd5b9050519061007482610085565b6001600160401b03811161005b57602090601f01601f19160190565b60005b8381106100d75750506000910152565b81810151838201526020016100c7565b909291926100fc6100f7826100a8565b610060565b9381855260208501908284011161009657610074926100c4565b9080601f83011215610096578151610082926020016100e7565b91909160408184031261009657610147838261009b565b60208201519093906001600160401b038111610096576100829201610116565b6101856104d68038038061017a81610060565b928339810190610130565b9091565b90610074916101c6565b61008290610076906001600160a01b031682565b61008290610193565b610082906101a7565b6100826100826100829290565b906101d0826102a3565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b6101fa836101b0565b9061020460405190565b600090a2805161021b61021760006101b9565b9190565b111561022d5761022a9161034d565b50565b50506100746102f5565b6001600160a01b03909116815260200190565b6100827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101b9565b9061028361008261029f926101b0565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6000813b6102b3610217836101b9565b146102ce5790610074916102c861008261024a565b01610273565b6102f1826102db60405190565b634c9c8ce360e01b815291829160048301610237565b0390fd5b3461030361021760006101b9565b1161030a57565b60405163b398979f60e01b8152600490fd5b906103296100f7836100a8565b918252565b3d156103485761033d3d61031c565b903d6000602084013e565b606090565b6000806100829361035c606090565b50805190602001845af461036e61032e565b919061037a57506103d6565b815160009061038b610217836101b9565b1490816103bf575b5061039c575090565b6102f1906103a960405190565b639996b31560e01b815291829160048301610237565b90506103cf610217833b926101b9565b1438610393565b80516103e561021760006101b9565b11156103f357805190602001fd5b604051630a12f52160e11b8152600490fdfe6080604052600a600e565b607a565b60146069565b90565b6014601460149290565b60147f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6017565b73ffffffffffffffffffffffffffffffffffffffff1690565b601490546048565b60146000607560146021565b016061565b60008091368280378136915af43d6000803e156095573d6000f35b3d6000fdfea2646970667358221220c2cde57a9a3a066b13561220e5106c90f155f1d8c0b18286351d4db3fa15dd4d64736f6c63430008140033", + Bin: "0x60806040526040516104d53803806104d58339810160408190526100229161036e565b61002c8282610033565b5050610410565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610182565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf91906103d6565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516101269190610406565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a3565b925050505b92915050565b34156101a15760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b8576101b3826101f9565b6101f2565b81511580156101cf57506001600160a01b0384163b155b156101ef5783604051639996b31560e01b81526004016100bf91906103d6565b50805b9392505050565b8051156102095780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b60006001600160a01b03821661017c565b61023f81610225565b811461022257600080fd5b805161017c81610236565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b038111828210171561029057610290610255565b6040525050565b60006102a260405190565b90506102ae828261026b565b919050565b60006001600160401b038211156102cc576102cc610255565b601f19601f83011660200192915050565b60005b838110156102f85781810151838201526020016102e0565b50506000910152565b600061031461030f846102b3565b610297565b90508281526020810184848401111561032f5761032f600080fd5b61033a8482856102dd565b509392505050565b600082601f83011261035657610356600080fd5b8151610366848260208601610301565b949350505050565b6000806040838503121561038457610384600080fd5b6000610390858561024a565b602085015190935090506001600160401b038111156103b1576103b1600080fd5b6103bd85828601610342565b9150509250929050565b6103d081610225565b82525050565b6020810161017c82846103c7565b60006103ee825190565b6103fc8185602086016102dd565b9290920192915050565b61017c81836103e4565b60b78061041e6000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea2646970667358221220679fbeba69a00d05fa2e591d481116c1a8115ed7134fc16aa8e7363bf3aec10164736f6c63430008140033", } // ERC1967ProxyABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ERC1967Utils/ERC1967Utils.go b/contracts/generated/ERC1967Utils/ERC1967Utils.go index 32390a4e07..e51556fabc 100644 --- a/contracts/generated/ERC1967Utils/ERC1967Utils.go +++ b/contracts/generated/ERC1967Utils/ERC1967Utils.go @@ -32,7 +32,7 @@ var ( // ERC1967UtilsMetaData contains all meta data concerning the ERC1967Utils contract. var ERC1967UtilsMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidBeacon\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}]", - Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea26469706673582212204f0f2ed754b8548335d3329d88b8cd1f89e3dd15901ed043ffcd20dd8234015164736f6c63430008140033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ec29ed6df4a2008096043ff8d92e1dd9d99c6cc624ee92395edf2d28183ba61964736f6c63430008140033", } // ERC1967UtilsABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/EthereumBridge/EthereumBridge.go b/contracts/generated/EthereumBridge/EthereumBridge.go index 40906e980f..493965af5c 100644 --- a/contracts/generated/EthereumBridge/EthereumBridge.go +++ b/contracts/generated/EthereumBridge/EthereumBridge.go @@ -32,7 +32,7 @@ var ( // EthereumBridgeMetaData contains all meta data concerning the EthereumBridge contract. var EthereumBridgeMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"remoteAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreatedWrappedToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messengerAddress\",\"type\":\"address\"}],\"name\":\"configure\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"hasTokenMapping\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"remoteBridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"localToRemoteToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"crossChainAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"onCreateTokenCommand\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"receiveAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"remoteToLocalToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendNative\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"wrappedTokens\",\"outputs\":[{\"internalType\":\"contractWrappedERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6080604052346200002657620000146200002b565b604051612d20620000938239612d2090f35b600080fd5b6200003562000084565b565b6200004a62000047620000479290565b90565b63ffffffff1690565b906200006762000047620000809262000037565b82549063ffffffff60a01b9060a01b9181191691161790565b9055565b62000035600060016200005356fe608060405260043610156200001b575b3662000f905762000fd5565b60003560e01c80628d48e314620000cd5780631888d71214620000c7578063458ffd6314620000c1578063485cc95514620000bb57806375cb267214620000b557806383bece4d14620000af5780639813c7b214620000a95780639e405b7114620000a3578063a381c8e2146200009d5763d5c6b504036200000f576200043f565b620003ef565b620003ce565b62000386565b62000368565b620002fe565b620002e0565b62000297565b620001e5565b620001a6565b6001600160a01b031690565b90565b6001600160a01b0381165b03620000f557565b600080fd5b905035906200010982620000e2565b565b90602082820312620000f557620000df91620000fa565b620000d3620000df620000df926001600160a01b031690565b620000df9062000122565b620000df906200013b565b906200015d9062000146565b600052602052604060002090565b620000df916008021c620000d3565b90620000df91546200016b565b620000df906200019c60049160009262000151565b6200017a565b9052565b34620000f557620001e1620001c7620001c13660046200010b565b62000187565b604051918291826001600160a01b03909116815260200190565b0390f35b620001fc620001f63660046200010b565b62000c00565b604051005b909182601f83011215620000f55781359167ffffffffffffffff8311620000f5576020019260018302840111620000f557565b606081830312620000f5576200024b8282620000fa565b92602082013567ffffffffffffffff8111620000f557836200026f91840162000201565b929093604082013567ffffffffffffffff8111620000f55762000293920162000201565b9091565b34620000f557620001fc620002ae36600462000234565b9392909262000a72565b9190604083820312620000f557620000df90620002d68185620000fa565b93602001620000fa565b34620000f557620001fc620002f7366004620002b8565b9062000742565b34620000f557620001fc620003153660046200010b565b62001129565b80620000ed565b9050359062000109826200031b565b9091606082840312620000f557620000df6200034e8484620000fa565b936200035e816020860162000322565b93604001620000fa565b34620000f557620001fc6200037f36600462000331565b9162000f83565b34620000f557620001e1620003a7620003a13660046200010b565b62000a9c565b60405191829182901515815260200190565b620000df906200019c60039160009262000151565b34620000f557620001e1620001c7620003e93660046200010b565b620003b9565b34620000f557620001fc6200040636600462000331565b9162000d81565b620000df906200019c60029160009262000151565b620001a29062000146565b60208101929162000109919062000422565b34620000f557620001e1620004606200045a3660046200010b565b6200040d565b604051918291826200042d565b620000df9060401c5b60ff1690565b620000df90546200046d565b620000df905b67ffffffffffffffff1690565b620000df905462000488565b6200048e620000df620000df9290565b620000df620000df620000df9290565b9067ffffffffffffffff905b9181191691161790565b6200048e620000df620000df9267ffffffffffffffff1690565b906200050b620000df6200051392620004dd565b8254620004c7565b9055565b9068ff00000000000000009060401b620004d3565b906200053f620000df6200051392151590565b825462000517565b620001a290620004a7565b60208101929162000109919062000547565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081620005a66200059f6200059b836200047c565b1590565b916200049b565b93600092620005b584620004a7565b67ffffffffffffffff87161480620006f6575b600196620005e8620005da89620004a7565b9167ffffffffffffffff1690565b149081620006c7575b155b9081620006bd575b5062000692576200062c91836200062186620006178a620004a7565b98019788620004f7565b62000680576200072a565b6200063657505050565b62000641916200052c565b6200067b7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916200067160405190565b9182918262000552565b0390a1565b6200068c87876200052c565b6200072a565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b15905038620005fb565b9050620005f3620006d83062000146565b3b620006ec620006e888620004b7565b9190565b14919050620005f1565b5082620005c8565b906001600160a01b0390620004d3565b9062000722620000df620005139262000146565b8254620006fe565b906200073a620001099262001129565b60056200070e565b90620001099162000564565b620000df90620000d3565b620000df90546200074e565b0190565b156200077157565b60405162461bcd60e51b815260206004820152603060248201527f436f6e74726163742063616c6c6572206973206e6f742074686520726567697360448201527f7465726564206d657373656e67657221000000000000000000000000000000006064820152608490fd5b15620007e457565b60405162461bcd60e51b815260206004820152603160248201527f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2060448201527f696e636f72726563742073656e646572210000000000000000000000000000006064820152608490fd5b906200010994939291620008af62000868600562000759565b6200087c620008766200119f565b62000769565b620008a86200089b6200088e620011c8565b926001600160a01b031690565b916001600160a01b031690565b14620007dc565b62000998565b634e487b7160e01b600052604160045260246000fd5b90826000939282370152565b9190620008f981620008f181620007659560209181520190565b8095620008cb565b601f01601f191690565b92906200092390620000df959360408601918683036000880152620008d7565b926020818503910152620008d7565b6040513d6000823e3d90fd5b949293620000df96946200097b62000989946200096b60808a019560008b01906001600160a01b03169052565b6001600160a01b03166020890152565b8683036040880152620008d7565b926060818503910152620008d7565b919093620009a560405190565b6117c7810181811067ffffffffffffffff82111762000a6c57620009d78387868a86956117c762001524883962000903565b03906000f093841562000a66576200067b9262000a0c620009f88762000146565b9662000a0688600262000151565b6200070e565b62000a1e8562000a0688600362000151565b62000a308662000a0687600462000151565b7f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca9662000a5c60405190565b968796876200093e565b62000932565b620008b5565b9062000109949392916200084f565b620000d3620000df620000df9290565b620000df9062000a81565b62000ac162000abb62000ac79262000ab2600090565b50600262000151565b62000759565b62000146565b62000adb6200089b620000d3600062000a91565b141590565b1562000ae857565b60405162461bcd60e51b815260206004820152600d60248201527f4e6f7468696e672073656e742e000000000000000000000000000000000000006044820152606490fd5b6001600160a01b0390911681526060810193926200010992909160409162000b56906020830152565b01906001600160a01b03169052565b90601f01601f1916810190811067ffffffffffffffff82111762000a6c57604052565b634e487b7160e01b600052602160045260246000fd5b6003111562000ba957565b62000b88565b90620001098262000b9e565b620000df9062000baf565b62000476620000df620000df9290565b6000910312620000f557565b6001600160a01b039091168152604081019291620001099160200152565b3460009162000c1b62000c1384620004b7565b831162000ae0565b62000ca9600462000c736383bece4d60e01b62000c63858762000c4f62000abb600362000c488d62000a91565b9062000151565b604051968795602087019081520162000b2d565b6020820181038252038262000b65565b62000c7f600562000759565b9062000c8b8662000bbb565b62000c9687620004b7565b9162000ca28862000bc6565b936200141a565b62000cb762000ac1620011bc565b9063346633fb91803b15620000f55762000ce884869462000cf462000cdb60405190565b9788968795869460e01b90565b84526004840162000be2565b03925af1801562000a665762000d08575050565b816200010992903d1062000d2c575b62000d23818362000b65565b81019062000bd6565b503d62000d17565b1562000d3c57565b60405162461bcd60e51b815260206004820152601560248201527f4e6f206d617070696e6720666f7220746f6b656e2e00000000000000000000006044820152606490fd5b62000d9662000d908262000a9c565b62000d34565b62000dab62000ac162000abb83600262000151565b90631dd319cb33833b15620000f557849362000ce86000809462000ddf62000dd260405190565b9889968795869460e01b90565b03925af1801562000a6657620001099460049462000e1c9462000c639362000e4e575b5062000c4f62000abb6383bece4d60e01b95600362000151565b62000e28600562000759565b9060009062000e378262000bbb565b9062000ca262000e4784620004b7565b9362000bc6565b62000e6190600062000d23818362000b65565b3862000e02565b9062000109929162000e7f62000868600562000759565b62000ef8565b1562000e8d57565b60405162461bcd60e51b815260206004820152602b60248201527f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726160448201527f7070656420746f6b656e210000000000000000000000000000000000000000006064820152608490fd5b919062000f2062000ac162000abb62000f1862000abb6004978862000151565b600262000151565b9260009362000f4962000f37620000d38762000a91565b6001600160a01b038316141562000e85565b63979005ad813b15620000f5578562000f799162000cf4829662000f6c60405190565b9889978896879560e01b90565b8552840162000be2565b9062000109929162000e68565b60405162461bcd60e51b815260206004820152601d60248201527f66616c6c6261636b2829206d6574686f6420756e737570706f727465640000006044820152606490fd5b60405162461bcd60e51b815260206004820152602360248201527f436f6e747261637420646f6573206e6f7420737570706f72742072656365697660448201527f65282900000000000000000000000000000000000000000000000000000000006064820152608490fd5b62000109906200104f62001134565b6200107b565b905051906200010982620000e2565b90602082820312620000f557620000df9162001055565b6200108a620010929162000146565b60006200070e565b620010c16020620010a862000ac1600062000759565b63a1a227fa90620010b860405190565b93849260e01b90565b825260049082905afa90811562000a66576200010991620010ec91600091620010f4575b5062000146565b60016200070e565b6200111a915060203d811162001121575b62001111818362000b65565b81019062001064565b38620010e5565b503d62001105565b620001099062001040565b620011426200059b62001174565b6200114957565b6040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152600490fd5b620000df7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006200047c565b33620011b86200089b620000d362000ac1600062000759565b1490565b620000df600162000759565b620011ee6020620011de62000ac1600062000759565b6363012de590620010b860405190565b825260049082905afa90811562000a66576000916200120b575090565b620000df915060203d8111620011215762001111818362000b65565b90620001096200123660405190565b928362000b65565b620000df606062001227565b60005b8381106200125e5750506000910152565b81810151838201526020016200124d565b62001294620008f9602093620007659362001288815190565b80835293849260200190565b958691016200124a565b80516001600160a01b0316825290620000df90604080620012cf60608401602087015185820360208701526200126f565b940151910152565b6020808252620000df929101906200129e565b620000df9060a01c5b63ffffffff1690565b620000df9054620012ea565b634e487b7160e01b600052601160045260246000fd5b63ffffffff1663ffffffff8114620013365760010190565b62001308565b9077ffffffff00000000000000000000000000000000000000009060a01b620004d3565b620012f3620000df620000df9263ffffffff1690565b906200138a620000df620005139262001360565b82546200133c565b67ffffffffffffffff8116620000ed565b90505190620001098262001392565b90602082820312620000f557620000df91620013a3565b9493916060916200010994620014026200141093620013f560808b019460008c019063ffffffff169052565b63ffffffff1660208a0152565b87820360408901526200126f565b94019060ff169052565b9193906020936200144c620014539262001446620014376200123e565b6001600160a01b039097168752565b86860152565b6040840152565b6200147f6200146160405190565b8093620014728683019182620012d7565b9081038252038362000b65565b620014d460006200149562000ac1600162000759565b92620014e063b1454caa91620014ac6001620012fc565b96620014c4620014bc896200131e565b600162001376565b604051998a988997889660e01b90565b865260048601620013c9565b03925af1801562000a6657620014f35750565b620015189060203d81116200151b575b6200150f818362000b65565b810190620013b2565b50565b503d6200150356fe60806040523462000031576200001f6200001862000175565b906200019c565b60405161123262000595823961123290f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160401b0381116200006e57602090601f01601f19160190565b60005b838110620000be5750506000910152565b8181015183820152602001620000ad565b90929192620000e8620000e2826200008d565b62000074565b9381855260208501908284011162000031576200008b92620000aa565b9080601f83011215620000315781516200012292602001620000cf565b90565b919091604081840312620000315780516001600160401b0381116200003157836200015291830162000105565b60208201519093906001600160401b038111620000315762000122920162000105565b62000198620017c7803803806200018c8162000074565b92833981019062000125565b9091565b90620001a891620001d7565b620001d4337fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775620004d5565b50565b6200008b9182918291829162000255565b906001600160a01b03905b9181191691161790565b620001229062000213906001600160a01b031682565b6001600160a01b031690565b6200012290620001fd565b62000122906200021f565b90620002496200012262000251926200022a565b8254620001e8565b9055565b9062000261916200047a565b6200008b73deb34a740eca1ec42c8b8204cbec0ba34fdd27f3600562000235565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620002bb575b6020831014620002b557565b62000282565b91607f1691620002a9565b9160001960089290920291821b911b620001f3565b6200012262000122620001229290565b919062000300620001226200025193620002db565b908354620002c6565b6200008b91600091620002eb565b81811062000323575050565b8062000333600060019362000309565b0162000317565b9190601f81116200034a57505050565b6200035e6200008b93600052602060002090565b906020601f84018190048301931062000382575b6020601f90910104019062000317565b909150819062000372565b9062000397815190565b906001600160401b0382116200006e57620003bf82620003b8855462000298565b856200033a565b602090601f8311600114620003fe5762000251929160009183620003f2575b5050600019600883021c1916906002021790565b015190503880620003de565b601f198316916200041485600052602060002090565b9260005b81811062000455575091600293918560019694106200043b575b50505002019055565b01516000196008601f8516021c1916905538808062000432565b9193602060018192878701518155019501920162000418565b906200008b916200038d565b906200048c6200008b9260036200046e565b60046200046e565b905b600052602052604060002090565b9062000496906200022a565b9060ff90620001f3565b90620004cd620001226200025192151590565b8254620004b0565b620004e9620004e583836200056b565b1590565b1562000564576001916200051883620005128360006200050b87600762000494565b01620004a4565b620004ba565b3390620005526200054b6200054b7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b926200022a565b926200055d60405190565b600090a490565b5050600090565b620001229160006200050b6200058d9362000584600090565b50600762000494565b5460ff169056fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461014257806306fdde031461013d578063095ea7b31461013857806318160ddd146101335780631dd319cb1461012e57806323b872dd14610129578063248a9ca3146101245780632f2ff15d1461011f578063313ce5671461011a57806336568abe1461011557806370a082311461011057806375b238fc1461010b57806391d148541461010657806395d89b4114610101578063979005ad146100fc578063a217fddf146100f7578063a9059cbb146100f2578063d547741f146100ed5763dd62ed3e0361017257610570565b61053d565b610521565b610506565b6104ce565b6104b3565b610497565b61045e565b610443565b610416565b6103e7565b6103ce565b610390565b610360565b610312565b6102e6565b6102ca565b610245565b61019d565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361017257565b600080fd5b9050359061018482610147565b565b906020828203126101725761019a91610177565b90565b34610172576101ca6101b86101b3366004610186565b61058c565b60405191829182901515815260200190565b0390f35b600091031261017257565b60005b8381106101ec5750506000910152565b81810151838201526020016101dc565b61021d61022660209361023093610211815190565b80835293849260200190565b958691016101d9565b601f01601f191690565b0190565b602080825261019a929101906101fc565b34610172576102553660046101ce565b6101ca610260610a37565b60405191829182610234565b6001600160a01b031690565b6001600160a01b03811661016b565b9050359061018482610278565b8061016b565b9050359061018482610294565b91906040838203126101725761019a906102c18185610287565b9360200161029a565b34610172576101ca6101b86102e03660046102a7565b90610a81565b34610172576102f63660046101ce565b6101ca610301610a62565b6040515b9182918290815260200190565b346101725761032b6103253660046102a7565b906111b4565b604051005b90916060828403126101725761019a6103498484610287565b936103578160208601610287565b9360400161029a565b34610172576101ca6101b8610376366004610330565b91610a8c565b906020828203126101725761019a9161029a565b34610172576101ca6103016103a636600461037c565b6106b8565b91906040838203126101725761019a906103c5818561029a565b93602001610287565b346101725761032b6103e13660046103ab565b906106f2565b34610172576103f73660046101ce565b6101ca610402610a58565b6040519182918260ff909116815260200190565b346101725761032b6104293660046103ab565b906107a6565b906020828203126101725761019a91610287565b34610172576101ca61030161045936600461042f565b610f05565b346101725761046e3660046101ce565b6101ca7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610301565b34610172576101ca6101b86104ad3660046103ab565b9061067f565b34610172576104c33660046101ce565b6101ca610260610a41565b346101725761032b6104e13660046102a7565b906110d0565b61019a61019a61019a9290565b61019a60006104e7565b61019a6104f4565b34610172576105163660046101ce565b6101ca6103016104fe565b34610172576101ca6101b86105373660046102a7565b90610a6c565b346101725761032b6105503660046103ab565b9061079c565b91906040838203126101725761019a906103c58185610287565b34610172576101ca610301610586366004610556565b90610f9e565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216149081156105dc575090565b61019a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b61026c61019a61019a926001600160a01b031690565b61019a90610638565b61019a9061064e565b9061062a90610657565b61019a905b60ff1690565b61019a905461066a565b61019a91600061069c6106a293610694600090565b506007610628565b01610660565b610675565b61019a9081565b61019a90546106a7565b60016106c961019a92610694600090565b016106ae565b90610184916106e56106e0826106b8565b6106fc565b906106ef9161081d565b50565b90610184916106cf565b610184903390610728565b6001600160a01b0390911681526040810192916101849160200152565b0152565b9061073a610736828461067f565b1590565b610742575050565b61077d61074e60405190565b9283927fe2517d3f00000000000000000000000000000000000000000000000000000000845260048401610707565b0390fd5b90610184916107926106e0826106b8565b906106ef9161089a565b9061018491610781565b906107b03361026c565b6001600160a01b038216036107c8576106ef9161089a565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061081261019a61081992151590565b82546107f3565b9055565b61082a610736838361067f565b156108935760019161084c8361084783600061069c876007610628565b610802565b339061088261087c61087c7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b92610657565b9261088c60405190565b600090a490565b5050600090565b906108a5818361067f565b15610893576108bf6000610847838261069c876007610628565b33906108ef61087c61087c7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b926108f960405190565b600090a4600190565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610938575b602083101461093357565b610902565b91607f1691610928565b8054600093929161095f61095583610918565b8085529360200190565b91600181169081156109b1575060011461097857505050565b61098b9192939450600052602060002090565b916000925b81841061099d5750500190565b805484840152602090930192600101610990565b92949550505060ff1916825215156020020190565b9061019a91610942565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff821117610a0857604052565b6109d0565b90610184610a2792610a1e60405190565b938480926109c6565b03836109e6565b61019a90610a0d565b61019a6003610a2e565b61019a6004610a2e565b61066f61019a61019a9290565b61019a6012610a4b565b61019a60026106ae565b610a7c919033610ab3565b610ab3565b600190565b610a7c919033610d52565b610a7c929190610a77833383610e81565b61026c61019a61019a9290565b61019a90610a9d565b929190610ac06000610aaa565b936001600160a01b0385166001600160a01b03821614610b48576001600160a01b0385166001600160a01b03831614610afe57610184939450610c02565b61077d85610b0b60405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61077d85610b5560405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6001600160a01b039091168152606081019392610184929091604091610724906020830152565b90600019906107f8565b90610bd361019a610819926104e7565b8254610bb9565b634e487b7160e01b600052601160045260246000fd5b91908201809211610bfd57565b610bda565b816000610c0e81610aaa565b6001600160a01b0381166001600160a01b03851603610cd857610c489061026c610c4188610c3c60026106ae565b610bf0565b6002610bc3565b6001600160a01b03831603610cb3575050610c6e610c4184610c6a60026106ae565b0390565b610cae610ca4610c9e7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef93610657565b93610657565b9361030560405190565b0390a3565b610cd391610cc091610660565b610ccd85610230836106ae565b90610bc3565b610c6e565b909150610ced610ce88484610660565b6106ae565b858110610d155784929161026c610d0688610c48940390565b610d108786610660565b610bc3565b8361077d87610d2360405190565b9384937fe450d38c00000000000000000000000000000000000000000000000000000000855260048501610b92565b9091610184926001925b909192610d696000610aaa565b6001600160a01b0381166001600160a01b03841614610e37576001600160a01b0381166001600160a01b03851614610ded5750610db484610d1085610daf866001610660565b610660565b610dbd57505050565b610cae610ca4610c9e7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593610657565b61077d90610dfa60405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61077d90610e4460405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b90929192610e8f8183610f9e565b936000198503610ea1575b5050509050565b808510610ec757610eb590610ebe94950390565b90600092610d5c565b80388080610e9a565b9061077d8592610ed660405190565b9384937ffb8f41b200000000000000000000000000000000000000000000000000000000855260048501610b92565b32610f216001600160a01b0383165b916001600160a01b031690565b14610f835733610f396001600160a01b038316610f14565b14610f835760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e6365006044820152606490fd5b61019a90610ce861019a91610f96600090565b506000610660565b90326001600160a01b0383168114908115611062575b5061103e57336001600160a01b0383168114908115611047575b5061103e5760405162461bcd60e51b815260206004820152602160248201527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b61019a9161107d565b905061105b6001600160a01b038316610f14565b1438610fce565b90506110766001600160a01b038316610f14565b1438610fb4565b61019a91610daf610ce892611090600090565b506001610660565b61018491906110c67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106fc565b90610184916110da565b9061018491611098565b91906110e66000610aaa565b926001600160a01b0384166001600160a01b0382161461110a576101849293610c02565b61077d84610b0b60405190565b61018491906111457fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106fc565b611196565b1561115157565b60405162461bcd60e51b815260206004820152601560248201527f496e73756666696369656e742062616c616e63652e00000000000000000000006044820152606490fd5b90610184916111af6111a782610f05565b83111561114a565b6111be565b9061018491611117565b91906111ca6000610aaa565b926001600160a01b0384166001600160a01b038216146111ef57926101849293610c02565b61077d84610b556040519056fea264697066735822122079eebf01d093afea82357215e4515e77a037e9fc967cff9adeeffb005ff0d0bd64736f6c63430008140033a26469706673582212209a640526e5cb5c8f83dfd23a5d720789c63b166b4fa865c4f21523cd2096936764736f6c63430008140033", + Bin: "0x60806040526001805463ffffffff60a01b1916905534801561002057600080fd5b50612abd806100306000396000f3fe608060405260043610620000c65760003560e01c806383bece4d11620000735780639e405b7111620000555780639e405b711462000256578063a381c8e21462000290578063d5c6b50414620002b557620000ef565b806383bece4d14620001e35780639813c7b2146200020857620000ef565b8063458ffd6311620000a9578063458ffd631462000174578063485cc955146200019957806375cb267214620001be57620000ef565b80628d48e314620001095780631888d712146200015b57620000ef565b36620000ef5760405162461bcd60e51b8152600401620000e69062000d72565b60405180910390fd5b60405162461bcd60e51b8152600401620000e69062000dbe565b3480156200011657600080fd5b50620001436200012836600462000e09565b6004602052600090815260409020546001600160a01b031681565b60405162000152919062000e47565b60405180910390f35b620001726200016c36600462000e09565b620002fe565b005b3480156200018157600080fd5b50620001726200019336600462000eaf565b6200047e565b348015620001a657600080fd5b5062000172620001b836600462000f4b565b620005e7565b348015620001cb57600080fd5b5062000172620001dd36600462000e09565b6200075b565b348015620001f057600080fd5b50620001726200020236600462000fa2565b6200083b565b3480156200021557600080fd5b50620002476200022736600462000e09565b6001600160a01b0390811660009081526002602052604090205416151590565b60405162000152919062001003565b3480156200026357600080fd5b50620001436200027536600462000e09565b6003602052600090815260409020546001600160a01b031681565b3480156200029d57600080fd5b5062000172620002af36600462000fa2565b6200097f565b348015620002c257600080fd5b50620002ef620002d436600462000e09565b6002602052600090815260409020546001600160a01b031681565b60405162000152919062001038565b60003411620003215760405162461bcd60e51b8152600401620000e6906200107b565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff546040516383bece4d60e01b9162000377916001600160a01b03909116903490869060240162001094565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600554909150620003f7906001600160a01b03168260005b60008062000b0b565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb903490620004469086908390600401620010c2565b6000604051808303818588803b1580156200046057600080fd5b505af115801562000475573d6000803e3d6000fd5b50505050505050565b6005546000546001600160a01b0391821691163314620004b25760405162461bcd60e51b8152600401620000e69062001141565b806001600160a01b0316620004c662000c20565b6001600160a01b031614620004ef5760405162461bcd60e51b8152600401620000e690620011ac565b600085858585604051620005039062000d0a565b620005129493929190620011ec565b604051809103906000f0801580156200052f573d6000803e3d6000fd5b506001600160a01b038082166000818152600260209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600383528184208054968f169682168717905594835260049091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90620005d5908a9084908b908b908b908b9062001221565b60405180910390a15050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015620006335750825b905060008267ffffffffffffffff166001148015620006515750303b155b90508115801562000660575080155b1562000698576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315620006cd57845468ff00000000000000001916680100000000000000001785555b620006d8876200075b565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156200047557845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906200074a9060019062001296565b60405180910390a150505050505050565b6200076562000ca0565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015620007e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080b9190620012b3565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6005546000546001600160a01b03918216911633146200086f5760405162461bcd60e51b8152600401620000e69062001141565b806001600160a01b03166200088362000c20565b6001600160a01b031614620008ac5760405162461bcd60e51b8152600401620000e690620011ac565b6001600160a01b03808516600090815260046020908152604080832054841680845260029092529091205490911680620008fa5760405162461bcd60e51b8152600401620000e69062001331565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad90620009439087908990600401620010c2565b600060405180830381600087803b1580156200095e57600080fd5b505af115801562000973573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0380841660009081526002602052604090205416620009b95760405162461bcd60e51b8152600401620000e69062001376565b6001600160a01b03808416600090815260026020526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb9062000a179033908790600401620010c2565b600060405180830381600087803b15801562000a3257600080fd5b505af115801562000a47573d6000803e3d6000fd5b5050506001600160a01b038086166000908152600360205260408082205490519193506383bece4d60e01b9262000a88929116908790879060240162001094565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260055490915062000b04906001600160a01b0316826000620003ee565b5050505050565b60006040518060600160405280876001600160a01b031681526020018681526020018481525060405160200162000b43919062001432565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff1690601462000b988362001474565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b815260040162000bda9493929190620014b1565b6020604051808303816000875af115801562000bfa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047591906200151c565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c75573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c9b9190620012b3565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662000d08576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611546806200154283390190565b60238152602081017f436f6e747261637420646f6573206e6f7420737570706f72742072656365697681527f6528290000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810162000d848162000d18565b92915050565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b6020808252810162000d848162000d8a565b60006001600160a01b03821662000d84565b62000ded8162000dd0565b811462000df957600080fd5b50565b803562000d848162000de2565b60006020828403121562000e205762000e20600080fd5b600062000e2e848462000dfc565b949350505050565b62000e418162000dd0565b82525050565b6020810162000d84828462000e36565b60008083601f84011262000e6e5762000e6e600080fd5b50813567ffffffffffffffff81111562000e8b5762000e8b600080fd5b60208301915083600182028301111562000ea85762000ea8600080fd5b9250929050565b60008060008060006060868803121562000ecc5762000ecc600080fd5b600062000eda888862000dfc565b955050602086013567ffffffffffffffff81111562000efc5762000efc600080fd5b62000f0a8882890162000e57565b9450945050604086013567ffffffffffffffff81111562000f2e5762000f2e600080fd5b62000f3c8882890162000e57565b92509250509295509295909350565b6000806040838503121562000f635762000f63600080fd5b600062000f71858562000dfc565b925050602062000f848582860162000dfc565b9150509250929050565b8062000ded565b803562000d848162000f8e565b60008060006060848603121562000fbc5762000fbc600080fd5b600062000fca868662000dfc565b935050602062000fdd8682870162000f95565b925050604062000ff08682870162000dfc565b9150509250925092565b80151562000e41565b6020810162000d84828462000ffa565b600062000d848262000dd0565b600062000d848262001013565b62000e418162001020565b6020810162000d8482846200102d565b600d8152602081017f4e6f7468696e672073656e742e000000000000000000000000000000000000008152905062000db8565b6020808252810162000d848162001048565b8062000e41565b60608101620010a4828662000e36565b620010b360208301856200108d565b62000e2e604083018462000e36565b60408101620010d2828562000e36565b620010e160208301846200108d565b9392505050565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e67657221000000000000000000000000000000006020820152905062000d6c565b6020808252810162000d8481620010e8565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e646572210000000000000000000000000000006020820152905062000d6c565b6020808252810162000d848162001153565b82818337506000910152565b818352602083019250620011e0828483620011be565b50601f01601f19160190565b6040808252810162001200818688620011ca565b9050818103602083015262001217818486620011ca565b9695505050505050565b6080810162001231828962000e36565b62001240602083018862000e36565b818103604083015262001255818688620011ca565b905081810360608301526200126c818486620011ca565b98975050505050505050565b600067ffffffffffffffff821662000d84565b62000e418162001278565b6020810162000d8482846200128b565b805162000d848162000de2565b600060208284031215620012ca57620012ca600080fd5b600062000e2e8484620012a6565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e210000000000000000000000000000000000000000006020820152905062000d6c565b6020808252810162000d8481620012d8565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e00000000000000000000008152905062000db8565b6020808252810162000d848162001343565b60005b83811015620013a55781810151838201526020016200138b565b50506000910152565b6000620013b9825190565b808452602084019350620013d281856020860162001388565b601f01601f19169290920192915050565b80516000906060840190620013f9858262000e36565b5060208301518482036020860152620014138282620013ae565b91505060408301516200142a60408601826200108d565b509392505050565b60208082528101620010e18184620013e3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe19820162001493576200149362001445565b5060010190565b63ffffffff811662000e41565b60ff811662000e41565b60808101620014c182876200149a565b620014d060208301866200149a565b8181036040830152620014e48185620013ae565b9050620014f56060830184620014a7565b95945050505050565b67ffffffffffffffff811662000ded565b805162000d8481620014fe565b600060208284031215620015335762001533600080fd5b600062000e2e84846200150f56fe6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f31790553480156200003757600080fd5b5060405162001546380380620015468339810160408190526200005a916200029e565b8181818160036200006c838262000412565b5060046200007b828262000412565b5050505050620000b27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620000bb60201b60201c565b505050620004de565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16620001645760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556200011b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000168565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620001ac57620001ac6200016e565b6040525050565b6000620001bf60405190565b9050620001cd828262000184565b919050565b60006001600160401b03821115620001ee57620001ee6200016e565b601f19601f83011660200192915050565b60005b838110156200021c57818101518382015260200162000202565b50506000910152565b60006200023c6200023684620001d2565b620001b3565b905082815260208101848484011115620002595762000259600080fd5b62000266848285620001ff565b509392505050565b600082601f830112620002845762000284600080fd5b81516200029684826020860162000225565b949350505050565b60008060408385031215620002b657620002b6600080fd5b82516001600160401b03811115620002d157620002d1600080fd5b620002df858286016200026e565b602085015190935090506001600160401b03811115620003025762000302600080fd5b62000310858286016200026e565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200034557607f821691505b6020821081036200035a576200035a6200031a565b50919050565b6000620001686200036e8381565b90565b6200037c8362000360565b815460001960089490940293841b1916921b91909117905550565b6000620003a681848462000371565b505050565b81811015620003ca57620003c160008262000397565b600101620003ab565b5050565b601f821115620003a6576000818152602090206020601f85010481016020851015620003f75750805b6200040b6020601f860104830182620003ab565b5050505050565b81516001600160401b038111156200042e576200042e6200016e565b6200043a825462000330565b62000447828285620003ce565b506020601f8211600181146200047f5760008315620004665750848201515b600019600885021c19811660028502178555506200040b565b600084815260208120601f198516915b82811015620004b157878501518255602094850194600190920191016200048f565b5084821015620004cf5783870151600019601f87166008021c191681555b50505050600202600101905550565b61105880620004ee6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c7c565b60405180910390f35b6101876103a0565b6040516101769190610ce0565b6101696101a2366004610d27565b610432565b6002545b6040516101769190610d6a565b6101cb6101c6366004610d27565b61044a565b005b6101696101db366004610d78565b6104b4565b6101ab6101ee366004610dc8565b60009081526007602052604090206001015490565b6101cb610211366004610de9565b6104da565b60126040516101769190610e25565b6101cb610233366004610de9565b610505565b6101ab610246366004610e33565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610de9565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d27565b6105d6565b6101ab600081565b6101696102dc366004610d27565b61060a565b6101cb6102ef366004610de9565b610618565b6101ab610302366004610e54565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e8c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e8c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610eec565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f2e565b6060600480546103af90610e8c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f3e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610fa8565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610fb6565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610fa8565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610fa8565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610fa8565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610fa8565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610fa8565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d6a565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fde565b6001600160a01b038316610b0c578060026000828254610b01919061100f565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610fb6565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d6a565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6000610c6a8484610c3e565b949350505050565b8015155b82525050565b6020810161039a8284610c72565b60005b83811015610ca5578181015183820152602001610c8d565b50506000910152565b6000610cb8825190565b808452602084019350610ccf818560208601610c8a565b601f01601f19169290920192915050565b602080825281016104d38184610cae565b60006001600160a01b03821661039a565b610c3381610cf1565b803561039a81610d02565b80610c33565b803561039a81610d16565b60008060408385031215610d3d57610d3d600080fd5b6000610d498585610d0b565b9250506020610d5a85828601610d1c565b9150509250929050565b80610c76565b6020810161039a8284610d64565b600080600060608486031215610d9057610d90600080fd5b6000610d9c8686610d0b565b9350506020610dad86828701610d0b565b9250506040610dbe86828701610d1c565b9150509250925092565b600060208284031215610ddd57610ddd600080fd5b6000610c6a8484610d1c565b60008060408385031215610dff57610dff600080fd5b6000610e0b8585610d1c565b9250506020610d5a85828601610d0b565b60ff8116610c76565b6020810161039a8284610e1c565b600060208284031215610e4857610e48600080fd5b6000610c6a8484610d0b565b60008060408385031215610e6a57610e6a600080fd5b6000610e0b8585610d0b565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610ea057607f821691505b602082108103610eb257610eb2610e76565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610eb8565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ee6565b6020808252810161039a81610efc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c7681610cf1565b6020810161039a8284610f9f565b60608101610fc48286610f9f565b610fd16020830185610d64565b610c6a6040830184610d64565b60408101610fec8285610f9f565b6104d36020830184610d64565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610ff956fea26469706673582212200ccb938df157c83569bb97b7cac53f726956a8f0a388597c60ae24feb0f05f4964736f6c63430008140033a26469706673582212204172d93cfb8a2353e719050fdcace139042298bb5992a07468564b3316bce15664736f6c63430008140033", } // EthereumBridgeABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/GasConsumerBalance/GasConsumerBalance.go b/contracts/generated/GasConsumerBalance/GasConsumerBalance.go index 416d2bfaa6..68455f7282 100644 --- a/contracts/generated/GasConsumerBalance/GasConsumerBalance.go +++ b/contracts/generated/GasConsumerBalance/GasConsumerBalance.go @@ -32,7 +32,7 @@ var ( // GasConsumerBalanceMetaData contains all meta data concerning the GasConsumerBalance contract. var GasConsumerBalanceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"destroy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"get_balance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"resetOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052346100225761001161008c565b6040516102b361009a82396102b390f35b600080fd5b61003b9061003e906001600160a01b031682565b90565b6001600160a01b031690565b61003b90610027565b61003b9061004a565b9061006c61003b61008892610053565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b61009733600061005c565b56fe6080604052600436101561001257600080fd5b60003560e01c806373cc802a1461005257806383197ef01461004d5780638da5cb5b146100485763c1cfb99a036100775761013f565b61010a565b6100cb565b61009f565b6001600160a01b031690565b90565b6001600160a01b0381160361007757565b600080fd5b9050359061008982610066565b565b90602082820312610077576100639161007c565b34610077576100b76100b236600461008b565b610272565b604051005b0390f35b600091031261007757565b34610077576100db3660046100c0565b6101f0565b610063916008021c6001600160a01b031690565b9061006391546100e0565b6100636000806100f4565b346100775761011a3660046100c0565b6100bc6101256100ff565b604051918291826001600160a01b03909116815260200190565b34610077576100b73660046100c0565b610057610063610063926001600160a01b031690565b6100639061014f565b61006390610165565b61006390610057565b6100639054610177565b1561019157565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f596f7520617265206e6f7420746865206f776e657200000000000000000000006044820152606490fd5b610217336102116102046100576000610180565b916001600160a01b031690565b1461018a565b6102286102233061016e565b61016e565bff5b9061023a61006361026e9261016e565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b61008990600061022a56fea26469706673582212201a7d9388031426ca415c2daf0e882d03e487595c09c4257da41987fb73953c8564736f6c63430008140033", + Bin: "0x608060405234801561001057600080fd5b50600080546001600160a01b0319163317905561023c806100326000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806373cc802a1461005157806383197ef0146100a85780638da5cb5b146100b0578063c1cfb99a146100a6575b600080fd5b6100a661005f366004610185565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6100a66100e6565b6000546100d09073ffffffffffffffffffffffffffffffffffffffff1681565b6040516100dd91906101bd565b60405180910390f35b60005473ffffffffffffffffffffffffffffffffffffffff163314610140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610137906101cb565b60405180910390fd5b30ff5b600073ffffffffffffffffffffffffffffffffffffffff82165b92915050565b61016c81610143565b811461017757600080fd5b50565b803561015d81610163565b60006020828403121561019a5761019a600080fd5b60006101a6848461017a565b949350505050565b6101b781610143565b82525050565b6020810161015d82846101ae565b6020808252810161015d81601581527f596f7520617265206e6f7420746865206f776e6572000000000000000000000060208201526040019056fea26469706673582212200e31111a553d671d87128078e7cb05bffb77af15bb82d394b7cc2b0b873f75cb64736f6c63430008140033", } // GasConsumerBalanceABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/Logger/Logger.go b/contracts/generated/Logger/Logger.go index 6e7c40424e..ad8e418274 100644 --- a/contracts/generated/Logger/Logger.go +++ b/contracts/generated/Logger/Logger.go @@ -32,7 +32,7 @@ var ( // LoggerMetaData contains all meta data concerning the Logger contract. var LoggerMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"LogMessage\",\"type\":\"event\"}]", - Bin: "0x60806040523461002057604051610182610026823930816007015261018290f35b600080fdfe6080604052307f00000000000000000000000000000000000000000000000000000000000000001415600436101561003657600080fd5b60003560e01c632e3c2a4d0361004b576100aa575b600080fd5b909182601f8301121561004b5781359167ffffffffffffffff831161004b57602001926001830284011161004b57565b9060208282031261004b57813567ffffffffffffffff811161004b576100a69201610050565b9091565b6100be6100b8366004610080565b9061010f565b604051005b90826000939282370152565b91906100ed816100e6816100f79560209181520190565b80956100c3565b601f01601f191690565b0190565b602080825261010c939101916100cf565b90565b907f96561394bac381230de4649200e8831afcab1f451881bbade9ef209f6dd304809161014761013e60405190565b928392836100fb565b0390a156fea2646970667358221220cba8e2b6b059209e9c52976e95bdd3b810c6435ce5e51d4312eaafe01f95dfdc64736f6c63430008140033", + Bin: "0x6101af61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80632e3c2a4d1461003a575b600080fd5b81801561004657600080fd5b5061005a6100553660046100eb565b61005c565b005b7f96561394bac381230de4649200e8831afcab1f451881bbade9ef209f6dd30480828260405161008d92919061015f565b60405180910390a15050565b60008083601f8401126100ae576100ae600080fd5b50813567ffffffffffffffff8111156100c9576100c9600080fd5b6020830191508360018202830111156100e4576100e4600080fd5b9250929050565b6000806020838503121561010157610101600080fd5b823567ffffffffffffffff81111561011b5761011b600080fd5b61012785828601610099565b92509250509250929050565b82818337506000910152565b818352602083019250610153828483610133565b50601f01601f19160190565b6020808252810161017181848661013f565b94935050505056fea2646970667358221220fccf38bd7af76a75484caca7fe2ce8683fdbead8d5476c2ee93dbc825f85c56964736f6c63430008140033", } // LoggerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ManagementContract/ManagementContract.go b/contracts/generated/ManagementContract/ManagementContract.go index 3e2072c1f7..77be41ff81 100644 --- a/contracts/generated/ManagementContract/ManagementContract.go +++ b/contracts/generated/ManagementContract/ManagementContract.go @@ -62,7 +62,7 @@ type StructsValueTransferMessage struct { // ManagementContractMetaData contains all meta data concerning the ManagementContract contract. var ManagementContractMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ImportantContractAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"messageBusAddress\",\"type\":\"address\"}],\"name\":\"LogManagementContractCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"RollupAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveRevoked\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"r\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"_rollupData\",\"type\":\"string\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"structStructs.HeaderCrossChainData\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"AddRollup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"Attested\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"_msg\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"ExtractNativeValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetImportantContractKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"GetRollupByHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"GetRollupByNumber\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"GetUniqueForkID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"GrantSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_enclaveID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initSecret\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_genesisAttestation\",\"type\":\"string\"}],\"name\":\"InitializeNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"IsSequencerEnclave\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IsWithdrawalAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"requestReport\",\"type\":\"string\"}],\"name\":\"RequestNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attesterID\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"requesterID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"attesterSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responseSecret\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"verifyAttester\",\"type\":\"bool\"}],\"name\":\"RespondNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RetrieveAllBridgeFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"RevokeSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetImportantContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_lastBatchHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockNum\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"rollupNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"forkID\",\"type\":\"bytes32\"}],\"name\":\"addCrossChainMessagesRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"importantContractAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"importantContractKeys\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"}],\"name\":\"isBundleAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isBundleSaved\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isWithdrawalSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSeqNo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"merkleMessageBus\",\"outputs\":[{\"internalType\":\"contractIMerkleTreeMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052346200002657620000146200002b565b6040516151e36200013b82396151e390f35b600080fd5b6200003633620000b9565b565b6200004a905b6001600160a01b031690565b90565b6200004a905462000038565b6200004a906200003e906001600160a01b031682565b6200004a9062000059565b6200004a906200006f565b90620000996200004a620000b5926200007a565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090620000f281620000eb846200004d565b9362000085565b62000129620001227f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936200007a565b916200007a565b916200013460405190565b600090a356fe608060405260043610156200001357600080fd5b60003560e01c80620ddd27146200022d57806303e72e481462000227578063073b6ef314620002215780632c77c81f146200021b5780632f0cb9e314620002155780633e60a22f146200020f57806343348b2f1462000209578063440c953b14620002035780634766573814620001fd5780635371a21614620001f7578063568699c814620001f157806368e1038314620001eb5780636a30d26c14620001e55780636b9707d614620001df578063715018a614620001d95780637281099614620001d35780638129fc1c14620001cd5780638236a7ba14620001c75780638415482614620001c157806387059edb14620001bb5780638da5cb5b14620001b557806398077e8614620001af578063a1a227fa14620001a9578063a4ab2faa14620001a3578063a52f433c146200019d578063d4fab8871462000197578063db5d91b11462000191578063e34fbfc8146200018b578063e874eb2014620001855763f2fde38b036200023f57620010ff565b620010de565b620010b6565b6200106b565b6200104a565b62000f91565b62000f70565b62000f18565b62000e83565b62000cac565b62000c8f565b62000c6e565b62000c23565b62000bf1565b62000bd4565b62000bb7565b62000b9a565b62000b6c565b62000ab8565b62000a1f565b62000979565b620008ce565b620008ad565b6200087e565b62000838565b620006e9565b6200065f565b620005a7565b620003f9565b62000274565b60009103126200023f57565b600080fd5b62000250916008021c81565b90565b9062000250915462000244565b620002506000600e62000253565b9052565b565b346200023f576200028736600462000233565b620002a66200029562000260565b6040515b9182918290815260200190565b0390f35b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff821117620002e357604052565b620002aa565b9062000272620002f860405190565b9283620002c0565b67ffffffffffffffff8111620002e357602090601f01601f19160190565b0190565b90826000939282370152565b9092919262000347620003418262000300565b620002e9565b938185526020850190828401116200023f57620002729262000322565b9080601f830112156200023f5781602062000250933591016200032e565b73ffffffffffffffffffffffffffffffffffffffff1690565b620003a68162000382565b036200023f57565b9050359062000272826200039b565b91906040838203126200023f5782359067ffffffffffffffff82116200023f57620003ef816200025093860162000364565b93602001620003ae565b346200023f576200041762000410366004620003bd565b9062003469565b604051005b80620003a6565b9050359062000272826200041c565b67ffffffffffffffff8111620002e35760208091020190565b9291906200045d620003418262000432565b93818552602080860192028101918383116200023f5781905b83821062000485575050505050565b813567ffffffffffffffff81116200023f57602091620004a9878493870162000364565b81520191019062000476565b9080601f830112156200023f5781602062000250933591016200044b565b909182601f830112156200023f5781359167ffffffffffffffff83116200023f5760200192600183028401116200023f57565b9160e0838303126200023f576200051e828462000423565b926200052e836020830162000423565b926200053e816040840162000423565b92606083013567ffffffffffffffff81116200023f578262000562918501620004b5565b9260808101359167ffffffffffffffff83116200023f576200058b8462000250948401620004d3565b9390946200059d8160a0860162000423565b9360c00162000423565b346200023f5762000417620005be36600462000506565b9695909594919493929362001d5a565b908160609103126200023f5790565b908160209103126200023f5790565b6060818303126200023f57803567ffffffffffffffff81116200023f578262000617918301620005ce565b92602082013567ffffffffffffffff81116200023f57836200063b918401620004d3565b929093604082013567ffffffffffffffff81116200023f57620002509201620005dd565b346200023f576200041762000676366004620005ec565b92919091620022dc565b906020828203126200023f57620002509162000423565b90620006a39062000250565b600052602052604060002090565b62000250916008021c5b60ff1690565b90620002509154620006b1565b6200025090620006e3600c9160009262000697565b620006c1565b346200023f57620002a66200070a6200070436600462000680565b620006ce565b60405191829182901515815260200190565b906020828203126200023f57813567ffffffffffffffff81116200023f5762000250920162000364565b60005b8381106200075a5750506000910152565b818101518382015260200162000749565b6200031e620007869260209262000780815190565b94859290565b9384910162000746565b620007a36200031e91602094936200076b565b918252565b620007c0620007b660405190565b9283928362000790565b03902090565b6200025091620007a8565b62000250916008021c73ffffffffffffffffffffffffffffffffffffffff1690565b90620002509154620007d1565b620002509062000815600391600092620007c6565b620007f3565b6200026e9062000382565b6020810192916200027291906200081b565b346200023f57620002a662000859620008533660046200071c565b62000800565b6040515b9182918262000826565b906020828203126200023f576200025091620003ae565b346200023f57620002a66200070a6200089936600462000867565b620030b3565b620002506000600562000253565b346200023f57620008c036600462000233565b620002a6620002956200089f565b346200023f5762000417620008e536600462000867565b6200311f565b908160809103126200023f5790565b909182601f830112156200023f5781359167ffffffffffffffff83116200023f5760200192602083028401116200023f57565b9060c0828203126200023f57620009458183620008eb565b92608083013567ffffffffffffffff81116200023f576200096d8362000250928601620008fa565b93909460a00162000423565b346200023f5762000417620009903660046200092d565b929190916200297f565b620009bf620009c96020936200031e93620009b3815190565b80835293849260200190565b9586910162000746565b601f01601f191690565b80518252906200025090604080620009fb60608401602087015185820360208701526200099a565b940151910152565b908152620002509160408201915b6020818403910152620009d3565b346200023f5762000a3c62000a3636600462000680565b62001a1f565b90620002a662000a4b60405190565b9283928362000a03565b6060818303126200023f5762000a6c8282620003ae565b92602082013567ffffffffffffffff81116200023f578362000a90918401620004d3565b929093604082013567ffffffffffffffff81116200023f5762000ab49201620004d3565b9091565b346200023f576200041762000acf36600462000a55565b939290926200271f565b9062000250916200099a565b9062000afd62000af3835190565b8083529160200190565b908162000b106020830284019460200190565b926000915b83831062000b2557505050505090565b9091929394602062000b4b62000b448385600195038752895162000ad9565b9760200190565b930193019193929062000b15565b6020808252620002509291019062000ae5565b346200023f5762000b7f36600462000233565b620002a662000b8d620034f7565b6040519182918262000b59565b346200023f576200041762000bb136600462000867565b620031de565b346200023f5762000bca36600462000233565b62000417620011a3565b346200023f5762000be736600462000233565b620004176200326b565b346200023f5762000c0436600462000233565b6200041762001720565b90151581526200025091604082019162000a11565b346200023f5762000c4062000c3a36600462000680565b62001912565b90620002a662000c4f60405190565b9283928362000c0e565b6200025090620006e3600d9160009262000697565b346200023f57620002a66200070a62000c8936600462000680565b62000c59565b346200023f5762000c4062000ca636600462000680565b62001984565b346200023f5762000cbf36600462000233565b620002a66200085962001133565b634e487b7160e01b600052603260045260246000fd5b805482101562000d085762000cff600191600052602060002090565b91020190600090565b62000ccd565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801562000d5d575b602083101462000d5757565b62000d24565b91607f169162000d4b565b8054600093929162000d8862000d7e8362000d3a565b8085529360200190565b916001811690811562000ddf575060011462000da357505050565b62000db79192939450600052602060002090565b916000925b81841062000dca5750500190565b80548484015260209093019260010162000dbc565b92949550505060ff1916825215156020020190565b90620002509162000d68565b906200027262000e1e9262000e1460405190565b9384809262000df4565b0383620002c0565b9060001062000e3a57620002509062000e00565b62000d0e565b6002600062000e4d825490565b83101562000e6d5750620002509162000e669162000ce3565b9062000e26565b80fd5b602080825262000250929101906200099a565b346200023f57620002a662000ea462000e9e36600462000680565b62000e40565b6040519182918262000e70565b620002506000600a620007f3565b6200038262000250620002509273ffffffffffffffffffffffffffffffffffffffff1690565b620002509062000ebf565b620002509062000ee5565b6200026e9062000ef0565b60208101929162000272919062000efb565b346200023f5762000f2b36600462000233565b620002a662000f3962000eb1565b6040519182918262000f06565b906020828203126200023f57813567ffffffffffffffff81116200023f57620002509201620004b5565b346200023f57620002a66200070a62000f8b36600462000f46565b62001b1f565b346200023f5762000fa436600462000233565b620002a66200070a620030a7565b801515620003a6565b90503590620002728262000fb2565b919060a0838203126200023f5762000fe38184620003ae565b9262000ff38260208301620003ae565b92604082013567ffffffffffffffff81116200023f57836200101791840162000364565b9260608301359067ffffffffffffffff82116200023f5762001040816200025093860162000364565b9360800162000fbb565b346200023f57620004176200106136600462000fca565b9392909262002c5f565b346200023f57620002a66200070a6200108636600462000867565b620030ce565b906020828203126200023f57813567ffffffffffffffff81116200023f5762000ab49201620004d3565b346200023f57620010c93660046200108c565b5050604051005b620002506000600b620007f3565b346200023f57620010f136600462000233565b620002a662000f39620010d0565b346200023f57620004176200111636600462000867565b6200129d565b620002509062000382565b6200025090546200111c565b620002507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930062001127565b62001168620011ad565b620002726200118d565b6200038262000250620002509290565b620002509062001172565b620002726200119d600062001182565b620012ea565b620002726200115e565b620011b762001133565b3390620011cf620011c88362000382565b9162000382565b03620011d85750565b6200121790620011e760405190565b9182917f118cdaa70000000000000000000000000000000000000000000000000000000083526004830162000826565b0390fd5b62000272906200122a620011ad565b62001236600062001182565b620012418162000382565b6200124c8362000382565b146200125e57506200027290620012ea565b62001217906200126d60405190565b9182917f1e4fbdf70000000000000000000000000000000000000000000000000000000083526004830162000826565b62000272906200121b565b9073ffffffffffffffffffffffffffffffffffffffff905b9181191691161790565b90620012de62000250620012e69262000ef0565b8254620012a8565b9055565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993009062001323816200131c8462001127565b93620012ca565b6200135a620013537f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000ef0565b9162000ef0565b916200136560405190565b600090a3565b620002509060401c620006bb565b6200025090546200136b565b62000250905b67ffffffffffffffff1690565b62000250905462001385565b6200138b62000250620002509290565b6200025062000250620002509290565b9067ffffffffffffffff90620012c0565b6200138b62000250620002509267ffffffffffffffff1690565b906200140362000250620012e692620013d5565b8254620013c4565b9068ff00000000000000009060401b620012c0565b151590565b906200143962000250620012e69262001420565b82546200140b565b6200026e90620013a4565b60208101929162000272919062001441565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00806200149e62001497620014938362001379565b1590565b9262001398565b91600090620014ad82620013a4565b67ffffffffffffffff85161480620015ee575b600194620014e0620014d287620013a4565b9167ffffffffffffffff1690565b149081620015bf575b155b9081620015b5575b506200158a578062001514836200150a87620013a4565b95019485620013ef565b62001578575b6200152462001629565b6200152e57505050565b620015399162001425565b620015737fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916200156960405190565b918291826200144c565b0390a1565b62001584848462001425565b6200151a565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b15905038620014f3565b9050620014eb620015d03062000ef0565b3b620015e4620015e086620013b4565b9190565b14919050620014e9565b5080620014c0565b9060001990620012c0565b906200161562000250620012e692620013b4565b8254620015f6565b6040513d6000823e3d90fd5b620016343362001744565b60006200164d6200164582620013b4565b600562001601565b620016656200165d6001620013b4565b600962001601565b604051611caa810181811067ffffffffffffffff821117620002e357620016938291611caa62003504843990565b0391f080156200171a57620016ac620016b49162000ef0565b600b620012ca565b620016da620016d2620016cc620016cc600b62001127565b62000ef0565b600a620012ca565b620016ea620016cc600a62001127565b620015737fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf916200085d60405190565b6200161d565b620002726200145e565b62000272906200173962001769565b62000272906200175e565b62000272906200172a565b62000272906200122a62001769565b62000272906200174f565b6200177762001493620017a9565b6200177e57565b6040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152600490fd5b620002507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0062001379565b620002506060620002e9565b620017ea620017d4565b600080825260606020830152604082015290565b62000250620017e0565b620002509081565b62000250905462001808565b805460009392916200183262000d7e8362000d3a565b916001811690811562000ddf57506001146200184d57505050565b620018619192939450600052602060002090565b916000925b818410620018745750500190565b80548484015260209093019260010162001866565b9062000250916200181c565b906200027262000e1e92620018a960405190565b9384809262001889565b9062000272620018fc6002620018c8620017d4565b94620018dc620018d88262001810565b8752565b620018f5620018ee6001830162001895565b6020880152565b0162001810565b6040840152565b6200025090620018b3565b5190565b906200191d620017fe565b50620019356200192f83600662000697565b62001903565b916200194d620015e062001949856200190e565b9290565b149190565b90620006a390620013b4565b90620007a3620003418362000300565b6200025060006200195e565b620002506200196e565b620019aa620019b09162001996600090565b50620019a1620017fe565b50600762001952565b62001810565b90600091620019bf83620013b4565b8114620019d35762000ab491925062001912565b50620019de620017d4565b91620019f4620019ee82620013b4565b82850152565b62001a0962001a026200197a565b6020850152565b620015e062001a1882620013b4565b6040850152565b62001a41919062001a2f620017fe565b5062001a3b8162001984565b93901590565b62001a5857620015e090620019aa90600862001952565b50620015e06000620013b4565b634e487b7160e01b600052601160045260246000fd5b600019811462001a8b5760010190565b62001a65565b9062001a9b825190565b81101562000d08576020809102010190565b62001acb62001ac562001abe835190565b9260200190565b6200190e565b906020811062001ad9575090565b62001aec90600019906020036008021b90565b1690565b908152604081019291620002729160200152565b0152565b6200025090620006bb565b62000250905462001b08565b60009062001b3862001b3183620013b4565b92620013b4565b915b62001b4762000250835190565b83101562001bbd5762001b8d62001b9a62001bb69262001b7362001b6c878762001a91565b5162001aad565b9062001b7e60405190565b93849260208401928362001af0565b90810382520382620002c0565b62001bae62001ba7825190565b9160200190565b209262001a7b565b9162001b3a565b62000250925062001bd19150600d62000697565b62001b13565b6020808252600e908201527f496e76616c696420666f726b4944000000000000000000000000000000000000604082015260600190565b9062001c1c62000af3835190565b908162001c2f6020830284019460200190565b926000915b83831062001c4457505050505090565b9091929394602062001c6362000b448385600195038752895162000ad9565b930193019193929062001c34565b909262001c999062001c9262000250969462001a0260808601976000870152565b6040830152565b606081840391015262001c0e565b620002509136916200032e565b90620006a39062000ef0565b60208082526016908201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604082015260600190565b1562001cff57565b60405162461bcd60e51b815280620012176004820162001cc0565b906200161562001d2e620012e69262000250565b62000250565b9060ff90620012c0565b9062001d5262000250620012e69262001420565b825462001d34565b95620015e062001949620019aa62001d7e939b9a949597969b600260060162001952565b0362001f215762001df7938762001db662001dd29562001dcb9462001b8d62001da660405190565b94859360208501938d8562001c71565b62001dc362001ba7825190565b209262001ca7565b9062001f3c565b9162001def62001de962001bd16000958662001cb4565b62001cf7565b600e62001d1a565b62001e0281620013b4565b9262001e0e82620013b4565b935b62001e1d62000250835190565b85101562001f025762001e35620016cc600b62001127565b63b6aed0cb62001e4a62001b6c888662001a91565b4292803b156200023f5762001e7687809462001e8262001e6960405190565b9788968795869460e01b90565b84526004840162001af0565b03925af180156200171a5762001ec89262001b8d9262001eb39262001ecf575b5062001b7362001b6c898762001a91565b62001ec062001ba7825190565b209462001a7b565b9362001e10565b62001ef390873d891162001efa575b62001eea8183620002c0565b81019062000233565b3862001ea2565b503d62001ede565b9150506200027291925062001f1b600191600d62000697565b62001d3e565b60405162461bcd60e51b815280620012176004820162001bd7565b620002509162001f4c9162001f56565b9092919262002111565b919060009262001f64825190565b62001f74620015e06041620013b4565b0362001fac5762001fa592935062001f8a600090565b506020820151906060604084015193015160001a906200200f565b9192909190565b50915062001fbb600062001182565b9062001fd162001fcb6002945190565b620013b4565b91929190565b6200025090620013b4565b62001b04620002729462001c9260609498979562002005608086019a6000870152565b60ff166020850152565b90916200201c8462001fd7565b6200204b620015e07f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0620013b4565b11620020c8579062002071602094600094936200206760405190565b9485948562001fe2565b838052039060015afa156200171a57600051600091620020918362001182565b6200209c8162000382565b620020a78462000382565b14620020b9575062001fd183620013b4565b915062001fd1600193620013b4565b505050620020d7600062001182565b9160039190565b634e487b7160e01b600052602160045260246000fd5b60041115620020ff57565b620020de565b906200027282620020f4565b6200211d600062002105565b620021288262002105565b0362002132575050565b6200213e600162002105565b620021498262002105565b036200217a576040517ff645eedf000000000000000000000000000000000000000000000000000000008152600490fd5b62002186600262002105565b620021918262002105565b03620021dc5762001217620021a68362001fd7565b6040519182917ffce698f70000000000000000000000000000000000000000000000000000000083526004830190815260200190565b620021f3620021ec600362002105565b9162002105565b14620021fc5750565b62001217906200220b60405190565b9182917fd78bce0c0000000000000000000000000000000000000000000000000000000083526004830190815260200190565b3562000250816200041c565b903590601e1936829003018212156200023f570180359067ffffffffffffffff82116200023f57602001913682900383136200023f57565b60208082526019908201527f656e636c6176654944206e6f7420612073657175656e63657200000000000000604082015260600190565b15620022c157565b60405162461bcd60e51b815280620012176004820162002282565b62002353935091506200230f9050620022f5826200223e565b62001dcb6200230860208501856200224a565b9062001ca7565b90620023416200233b62001bd16000946200233362001de962001bd1838962001cb4565b600162001cb4565b620022b9565b6200234c8162002595565b016200223e565b620015737fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a58916200029960405190565b9160001960089290920291821b911b620012c0565b921b90565b9190620023b262000250620012e693620013b4565b90835462002383565b62000272916000916200239d565b818110620023d5575050565b80620023e56000600193620023bb565b01620023c9565b9190601f8111620023fc57505050565b620024106200027293600052602060002090565b906020601f84018190048301931062002434575b6020601f909101040190620023c9565b909150819062002424565b919067ffffffffffffffff8211620002e357620024698262002462855462000d3a565b85620023ec565b600090601f8311600114620024a857620012e69291600091836200249c575b5050600019600883021c1916906002021790565b01359050388062002488565b601f19831691620024be85600052602060002090565b92815b818110620024ff57509160029391856001969410620024e4575b50505002019055565b0135600019601f84166008021c19165b9055388080620024db565b91936020600181928787013581550195019201620024c1565b906200027292916200243f565b62000272919062002574906040906002906200254d8162002546876200223e565b9062001d1a565b6200256b600182016200256460208801886200224a565b9162002518565b0192016200223e565b9062001601565b90620002729162002525565b9190820391821162001a8b57565b6040906200266781620026526006620025c583620025bf83620025b8836200223e565b9062000697565b6200257b565b62002607600262001b8d6200263762002613620025e2886200223e565b976200260d60018801996200260760038a019b620026008d62001810565b9062001952565b62001d1a565b6200223e565b6200262b43620026246001620013b4565b9062002587565b409062001b7e60405190565b6200264462001ba7825190565b209201620026008562001810565b62002574620026618262001810565b62001a7b565b0162002673816200223e565b62002687620015e062000250600562001810565b11620026905750565b6200164562000272916200223e565b60208082526022908201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60408201527f6564000000000000000000000000000000000000000000000000000000000000606082015260800190565b156200270457565b60405162461bcd60e51b81528062001217600482016200269f565b93505050506200273e6200273862001493600462001b13565b620026fc565b6200276f60016200275181600462001d3e565b620027638162001f1b85600062001cb4565b62001f1b838262001cb4565b620015737ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e760936916200085d60405190565b5062000250906020810190620003ae565b506200025090602081019062000423565b67ffffffffffffffff8116620003a6565b905035906200027282620027c1565b5062000250906020810190620027d2565b9060606200285b6200027293620028196200281160008301836200279f565b85906200081b565b620028376200282c60208301836200279f565b60208601906200081b565b620028516200284a6040830183620027b0565b6040860152565b82810190620027e1565b67ffffffffffffffff16910152565b9037565b8183529091602001917f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116200023f57829160206200031e92029384916200286a565b94939160a0916200027294620028e492620028d660c08a019360008b0190620027f2565b88830360808a01526200286e565b940152565b608081019291620002729190620027f2565b60208082526018908201527f7769746864726177616c20616c7265616479207370656e740000000000000000604082015260600190565b156200293a57565b60405162461bcd60e51b8152806200121760048201620028fb565b3562000250816200039b565b9160206200027292949362001b04604082019660008301906200081b565b929062002991620016cc600b62001127565b63b201246f92813b156200023f57600093620029cf620029c292620029b560405190565b9788968795869560e01b90565b85528a60048601620028b2565b03915afa80156200171a5762002af4575b50604051620029f9816020810162001b8d8582620028e9565b62002a0662001ba7825190565b209062002a6962002a1e62001bd1600c948562000697565b6000939062002a2e901562002932565b62001f1b60019162002a3f60405190565b62002a54816020810162001b8d8982620028e9565b62002a6162001ba7825190565b209062000697565b62002a79620016cc600a62001127565b906399a3ad219062002a9c604062002a946020840162002955565b92016200223e565b92803b156200023f5762002aba85809462002ac662001e6960405190565b84526004840162002961565b03925af180156200171a5762002ada575050565b816200027292903d1062001efa5762001eea8183620002c0565b62002b0790600062001eea8183620002c0565b38620029e0565b60208082526023908201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360408201527f7465640000000000000000000000000000000000000000000000000000000000606082015260800190565b1562002b7357565b60405162461bcd60e51b815280620012176004820162002b0e565b60601b90565b620002509062002b8e565b62002bae6200026e9162000382565b62002b94565b9162002bd760148462002bce620002509796839662002b9f565b01809262002b9f565b01906200076b565b6020808252602c908201527f63616c63756c61746564206164647265737320616e642061747465737465724960408201527f4420646f6e74206d617463680000000000000000000000000000000000000000606082015260800190565b1562002c4457565b60405162461bcd60e51b815280620012176004820162002bdf565b9162001f1b9262000272959460009562002c8862002c8262001bd1858a62001cb4565b62002b6b565b62002c9a575b50505060019262001cb4565b620011c862002cde62002cec9462002cd862002ce59462002cd262002cbe60405190565b809262001b8d60208301918d8c8462002bb4565b62002d64565b62001f3c565b9262000382565b1462002c3c565b38808062002c8e565b620002509291601a62002d2c9262002bd7817f19457468657265756d205369676e6564204d6573736167653a0a0000000000009052565b906200076b565b62002d579291620002729162002d4860405190565b94859260208401928362002cf5565b90810382520383620002c0565b62002d869062002d806200025062002d7a835190565b62002df3565b62002d33565b62002d9362001ba7825190565b2090565b369037565b906200027262002db762002db0846200195e565b9362000300565b601f19016020840162002d97565b6000190190565b634e487b7160e01b600052601260045260246000fd5b811562002ded570490565b62002dcc565b62002dfe8162002ea4565b9062002e116001926200031e84620013b4565b918062002e1e8462002d9c565b936020018401905b62002e32575b50505090565b62002e4162002e7d9162002dc5565b927f3031323334353637383961626364656600000000000000000000000000000000600a82061a845362002e76600a620013b4565b9062002de2565b908162002e8f620015e06000620013b4565b1462002e9e5790918162002e26565b62002e2c565b62002eb06000620013b4565b907a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000062002ed881620013b4565b82101562003064575b506d04ee2d6d415b85acef810000000062002efc81620013b4565b8210156200303b575b50662386f26fc1000062002f1981620013b4565b82101562003012575b506305f5e10062002f3381620013b4565b82101562002fe9575b5061271062002f4b81620013b4565b82101562002fc0575b50606462002f6281620013b4565b82101562002f97575b5062002f7c620015e0600a620013b4565b101562002f865790565b62000250906200031e6001620013b4565b62002fb89162002e7662002fab92620013b4565b916200031e6002620013b4565b903862002f6b565b62002fe19162002e7662002fd492620013b4565b916200031e6004620013b4565b903862002f54565b6200300a9162002e7662002ffd92620013b4565b916200031e6008620013b4565b903862002f3c565b620030339162002e766200302692620013b4565b916200031e6010620013b4565b903862002f22565b6200305c9162002e766200304f92620013b4565b916200031e6020620013b4565b903862002f05565b620030859162002e766200307892620013b4565b916200031e6040620013b4565b903862002ee1565b620002509060081c620006bb565b6200025090546200308d565b6200025060046200309b565b62001bd16200025091620030c5600090565b50600062001cb4565b62001bd16200025091620030e0600090565b50600162001cb4565b6200027290620030f8620011ad565b6200310d62001de962001bd183600062001cb4565b6200276f600162001f1b838262001cb4565b6200027290620030e9565b620002729062003139620011ad565b62003181565b91906008620012c09102916200239860ff841b90565b91906200316a62000250620012e69362001420565b9083546200313f565b620002729160009162003155565b620031ae6000620031a8836001620031a26200233b62001bd1848462001cb4565b62001cb4565b62003173565b620015737f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47916200085d60405190565b62000272906200312a565b620031f3620011ad565b6200027262003207620016cc600a62001127565b6336d2da9033823b156200023f57620032459262003239600080946200322c60405190565b9687958694859360e01b90565b83526004830162000826565b03925af180156200171a57620032585750565b6200027290600062001eea8183620002c0565b62000272620031e9565b90620002729162003285620011ad565b620033cd565b9062003295815190565b9067ffffffffffffffff8211620002e357620032b78262002462855462000d3a565b602090601f8311600114620032f557620012e6929160009183620032e9575050600019600883021c1916906002021790565b01519050388062002488565b601f198316916200330b85600052602060002090565b9260005b8181106200334657509160029391856001969410620033315750505002019055565b01516000196008601f8516021c1916620024f4565b919360206001819287870151815501950192016200330f565b919062000e3a5762000272916200328b565b9081549168010000000000000000831015620002e357826200339d916001620002729501815562000ce3565b906200335f565b92916020620033c46200027293604087019087820360008901526200099a565b9401906200081b565b906200341c8162003416846003620033f0620033ea8383620007c6565b62001127565b6200340a620011c862003404600062001182565b62000382565b146200345657620007c6565b620012ca565b7f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb591620015736200344c60405190565b92839283620033a4565b6200346382600262003371565b620007c6565b90620002729162003275565b90620007a3620003418362000432565b620002509062000e00565b906200349a825490565b620034a58162003475565b92620034ba6020850191600052602060002090565b6000915b838310620034cc5750505050565b600160208192620034dd8562003485565b815201920192019190620034be565b620002509062003490565b620002506002620034ec56fe6080604052346200002657620000146200002b565b604051611ae5620001c58239611ae590f35b600080fd5b6200003562000037565b565b62000035336200008d565b6200005562000052620000529290565b90565b6001600160a01b031690565b620000529062000042565b620000779062000055565b9052565b6020810192916200003591906200006c565b62000099600062000061565b620000a48162000055565b620000af8362000055565b14620000c15750620000359062000162565b620000e790620000d060405190565b631e4fbdf760e01b8152918291600483016200007b565b0390fd5b620000529062000055565b620000529054620000eb565b620000529062000055906001600160a01b031682565b620000529062000102565b620000529062000118565b9062000142620000526200015e9262000123565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200016e6000620000f6565b906200017c8160006200012e565b620001b3620001ac7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000123565b9162000123565b91620001be60405190565b600090a356fe6080604052600436101561001d575b366119cf5761001b611a3d565b005b60003560e01c80630fcfbd11146100fd5780630fe9188e146100f857806333a88c72146100f3578063346633fb146100ee57806336d2da90146100e9578063715018a6146100e45780638da5cb5b146100df5780639730886d146100da57806399a3ad21146100d5578063b1454caa146100d0578063b201246f146100cb578063b6aed0cb146100c6578063e138a8d2146100c15763f2fde38b0361000e57610560565b610544565b6104d4565b61049e565b6103e2565b610316565b6102fd565b610291565b610279565b610256565b61022e565b6101b6565b610199565b610140565b908160c09103126101105790565b600080fd5b9060208282031261011057813567ffffffffffffffff81116101105761013b9201610102565b90565b565b346101105761016b61015b610156366004610115565b61142d565b6040519182918290815260200190565b0390f35b805b0361011057565b9050359061013e8261016f565b906020828203126101105761013b91610178565b34610110576101b16101ac366004610185565b61091b565b604051005b346101105761016b6101d16101cc366004610115565b61138a565b60405191829182901515815260200190565b6001600160a01b031690565b6001600160a01b038116610171565b9050359061013e826101ef565b91906040838203126101105761013b9061022581856101fe565b93602001610178565b6101b161023c36600461020b565b90611084565b906020828203126101105761013b916101fe565b34610110576101b1610269366004610242565b6119c6565b600091031261011057565b346101105761028936600461026e565b6101b16105b0565b34610110576102a136600461026e565b61016b6102b66000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b91906040838203126101105782359067ffffffffffffffff8211610110576102258161013b938601610102565b34610110576101b16103103660046102d0565b90611996565b34610110576101b161032936600461020b565b906112c0565b63ffffffff8116610171565b9050359061013e8261032f565b909182601f830112156101105781359167ffffffffffffffff831161011057602001926001830284011161011057565b60ff8116610171565b9050359061013e82610378565b919091608081840312610110576103a5838261033b565b926103b3816020840161033b565b92604083013567ffffffffffffffff8111610110576103d78361013b928601610348565b939094606001610381565b346101105761016b6104016103f836600461038e565b93929092611331565b6040519182918267ffffffffffffffff909116815260200190565b908160809103126101105790565b909182601f830112156101105781359167ffffffffffffffff831161011057602001926020830284011161011057565b9060c0828203126101105761046f818361041c565b92608083013567ffffffffffffffff8111610110576104938361013b92860161042a565b93909460a001610178565b34610110576101b16104b136600461045a565b92919091610f8a565b91906040838203126101105761013b906102258185610178565b34610110576101b16104e73660046104ba565b90610876565b9060608282031261011057813567ffffffffffffffff81116101105781610515918401610102565b92602083013567ffffffffffffffff8111610110576105398361013b92860161042a565b939094604001610178565b34610110576101b16105573660046104ed565b92919091610c62565b34610110576101b1610573366004610242565b6106a1565b6105806105b8565b61013e61059e565b6101e361013b61013b9290565b61013b90610588565b61013e6105ab6000610595565b610702565b61013e610578565b60005433906001600160a01b03168190036105d05750565b61061a906105dd60405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b61013e9061062a6105b8565b6106346000610595565b6001600160a01b0381166001600160a01b03831614610657575061013e90610702565b61061a9061066460405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61013e9061061e565b906001600160a01b03905b9181191691161790565b6101e361013b61013b926001600160a01b031690565b61013b906106bf565b61013b906106d5565b906106f761013b6106fe926106de565b82546106aa565b9055565b6000546001600160a01b03169061071a8160006106e7565b61074d6107477f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936106de565b916106de565b9161075760405190565b80805b0390a3565b9061013e9161076c6105b8565b610836565b905b600052602052604060002090565b61013b9081565b61013b9054610781565b61013b61013b61013b9290565b0190565b156107aa57565b60405162461bcd60e51b815260206004820152602560248201527f526f6f7420616c726561647920616464656420746f20746865206d657373616760448201527f65206275730000000000000000000000000000000000000000000000000000006064820152608490fd5b90600019906106b5565b9061082f61013b6106fe92610792565b8254610815565b9061087161013e92600461086c6108556108508484610771565b610788565b6108666108626000610792565b9190565b146107a3565b610771565b61081f565b9061013e9161075f565b61013e9061088c6105b8565b6108dd565b1561089857565b60405162461bcd60e51b815260206004820152601a60248201527f537461746520726f6f7420646f6573206e6f742065786973742e0000000000006044820152606490fd5b61013e906108716004916109156108f76108508386610771565b61091060009161090961086284610792565b1415610891565b610792565b92610771565b61013e90610880565b1561092b57565b60405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201527f7373616765206275732e000000000000000000000000000000000000000000006064820152608490fd5b1561099d57565b60405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608490fd5b5061013b9060208101906101fe565b67ffffffffffffffff8116610171565b9050359061013e826109fb565b5061013b906020810190610a0b565b5061013b90602081019061033b565b9035601e19368390030181121561011057016020813591019167ffffffffffffffff82116101105736829003831361011057565b90826000939282370152565b9190610a9481610a8d8161079f9560209181520190565b8095610a6a565b601f01601f191690565b5061013b906020810190610381565b9061013b9060a0610b58610b4e60c08401610ad8610acb88806109ec565b6001600160a01b03168652565b610af9610ae86020890189610a18565b67ffffffffffffffff166020870152565b610b16610b096040890189610a27565b63ffffffff166040870152565b610b33610b266060890189610a27565b63ffffffff166060870152565b610b406080880188610a36565b908683036080880152610a76565b9482810190610a9e565b60ff16910152565b602080825261013b92910190610aad565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff821117610ba957604052565b610b71565b60408082526001908201527f6d000000000000000000000000000000000000000000000000000000000000006060820152919061013e90602060808501940152565b15610bf757565b60405162461bcd60e51b815260206004820152603060248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7360448201527f7320636861696e206d6573736167652e000000000000000000000000000000006064820152608490fd5b92610d469261013e94610caf6004610c94610c806108508784610771565b610c8d6108626000610792565b1415610924565b610ca861086261013b610850884295610771565b1015610996565b610cd7610cbb60405190565b8092610ccb602083019182610b60565b90810382520382610b87565b610ce9610ce2825190565b9160200190565b20610d06610cf660405190565b8092610ccb602083019182610bae565b610d11610ce2825190565b20610d34610d1e60405190565b8092610ccb60208301918261079f816020939052565b610d3f610ce2825190565b2092610d4b565b610bf0565b610d6a929361086292610d6692610d60600090565b50610dcd565b9290565b1490565b634e487b7160e01b600052601160045260246000fd5b6000198114610d935760010190565b610d6e565b634e487b7160e01b600052603260045260246000fd5b9190811015610dbe576020020190565b610d98565b3561013b8161016f565b610dd76000610792565b925b82841015610e0d57610e01610e0791610dfb610df6878787610dae565b610dc3565b90610e14565b93610d84565b92610dd9565b9250505090565b81811015610e2f579061013b91600052602052604060002090565b61013b91600052602052604060002090565b5061013b906020810190610178565b906060610eb761013e93610e77610e6a60008301836109ec565b6001600160a01b03168552565b610e97610e8760208301836109ec565b6001600160a01b03166020860152565b610eae610ea76040830183610e41565b6040860152565b82810190610a18565b67ffffffffffffffff16910152565b60808101929161013e9190610e50565b60408082526001908201527f76000000000000000000000000000000000000000000000000000000000000006060820152919061013e90602060808501940152565b15610f1f57565b60405162461bcd60e51b815260206004820152603360248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7560448201527f65207472616e73666572206d6573736167652e000000000000000000000000006064820152608490fd5b92610fec9261013e94610fa86004610c94610c806108508784610771565b610fc4610fb460405190565b8092610ccb602083019182610ec6565b610fcf610ce2825190565b20610d06610fdc60405190565b8092610ccb602083019182610ed6565b610f18565b15610ff857565b60405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e67204574686572000000000000000000000000000000006064820152608490fd5b90815260408101929161013e916020905b019067ffffffffffffffff169052565b6110a234926110936000610792565b841190816110f5575b50610ff1565b336110ac81611191565b6110df6110d97f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6936106de565b936106de565b9361075a6110ec60405190565b92839283611063565b905083143861109c565b90610773906106de565b61013b905b67ffffffffffffffff1690565b61013b9054611109565b61110e61013b61013b9290565b67ffffffffffffffff9081169116019067ffffffffffffffff8211610d9357565b9067ffffffffffffffff906106b5565b61110e61013b61013b9267ffffffffffffffff1690565b9061118a61013b6106fe92611163565b8254611153565b9061013e60036111cf6111c06111af6111aa87856110ff565b61111b565b956111ba6001611125565b936110ff565b916111ca8361111b565b611132565b9061117a565b9061013e916111e26105b8565b61129a565b9061013e6111f460405190565b9283610b87565b67ffffffffffffffff8111610ba957602090601f01601f19160190565b9061122a611225836111fb565b6111e7565b918252565b3d156112495761123e3d611218565b903d6000602084013e565b606090565b1561125557565b60405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606490fd5b6000809161013e936112ab60405190565b90818003925af16112ba61122f565b5061124e565b9061013e916111d5565b97969461131a60a09561130d6113279661130061013e9b969760208f61107460c082019b60008301906001600160a01b03169052565b63ffffffff1660408d0152565b63ffffffff1660608b0152565b88830360808a0152610a76565b94019060ff169052565b9290919361138490611341600090565b50339261134d84611191565b9687957fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef7759379761137b60405190565b978897886112ca565b0390a190565b6108506113b991611399600090565b506113a6610cbb60405190565b6113b1610ce2825190565b206001610771565b6113c36000610792565b811190816113cf575090565b429150111590565b156113de57565b60405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d69747465646044820152601760f91b6064820152608490fd5b61085061143c91611399600090565b61013b6114496000610792565b82116113d7565b9061013e9161145d6105b8565b6118ff565b91908201809211610d9357565b1561147657565b60405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b3561013b816101ef565b3561013b8161032f565b61150861013b61013b9263ffffffff1690565b63ffffffff1690565b90610773906114f5565b8054821015610dbe57611535600491600052602060002090565b91020190600090565b634e487b7160e01b600052600060045260246000fd5b3561013b816109fb565b907bffffffffffffffff00000000000000000000000000000000000000009060a01b6106b5565b9061159561013b6106fe92611163565b825461155e565b907fffffffff000000000000000000000000000000000000000000000000000000009060e01b6106b5565b906115d761013b6106fe926114f5565b825461159c565b9063ffffffff906106b5565b906115fa61013b6106fe926114f5565b82546115de565b903590601e193682900301821215610110570180359067ffffffffffffffff8211610110576020019136829003831361011057565b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561166c575b602083101461166757565b611636565b91607f169161165c565b9160001960089290920291821b911b6106b5565b919061169b61013b6106fe93610792565b908354611676565b61013e9160009161168a565b8181106116ba575050565b806116c860006001936116a3565b016116af565b9190601f81116116dd57505050565b6116ef61013e93600052602060002090565b906020601f840181900483019310611711575b6020601f9091010401906116af565b9091508190611702565b919067ffffffffffffffff8211610ba9576117408261173a855461164c565b856116ce565b600090601f831160011461177b576106fe929160009183611770575b5050600019600883021c1916906002021790565b01359050388061175c565b601f1983169161179085600052602060002090565b92815b8181106117cd575091600293918560019694106117b4575b50505002019055565b0135600019601f84166008021c191690553880806117ab565b91936020600181928787013581550195019201611793565b9061013e929161171b565b3561013b81610378565b9060ff906106b5565b61181361013b61013b9260ff1690565b60ff1690565b9061182961013b6106fe92611803565b82546117fa565b61013e91906118b79060a09060039061187c8161185561184f886114e1565b826106e7565b61186a61186460208901611554565b82611585565b611876604088016114eb565b906115c7565b6118956001820161188f606088016114eb565b906115ea565b6118af600282016118a96080880188611601565b916117e5565b0192016117f0565b90611819565b91906118cc5761013e91611830565b61153e565b9081549168010000000000000000831015610ba957826118f991600161013e9501815561151b565b906118bd565b61199161013b61197f61191561013e9542611462565b61196c61192160405190565b6119338160208101610ccb8a82610b60565b61193e610ce2825190565b20916108716001936119536108508287610771565b9461086c60009661196661086289610792565b1461146f565b61197960029186016114e1565b906110ff565b61198b606085016114eb565b90611511565b6118d1565b9061013e91611450565b61013e906119ac6105b8565b60008061013e926119bc306106de565b316112ab60405190565b61013e906119a0565b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f727465640000000000000000000000000000000000000000006044820152606490fd5b6001600160a01b03909116815260408101929161013e9160200152565b6040513d6000823e3d90fd5b611a46306106de565b63346633fb34913390803b1561011057611a7684600094611a81611a6960405190565b9788968795869460e01b90565b845260048401611a14565b03925af18015611aaa57611a925750565b61013e906000611aa28183610b87565b81019061026e565b611a3156fea2646970667358221220f1d785fdbb2d651555a3e150a57286c72acedb6ae4e42ca19d2777f4fbfc83b664736f6c63430008140033a2646970667358221220a0f159cc8662db784b797a62a85a315050fcfe3fb5b3d3d23b0688aaa8598fc364736f6c63430008140033", + Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b614d2680620000a06000396000f3fe60806040523480156200001157600080fd5b5060043610620002005760003560e01c8063728109961162000119578063a1a227fa11620000af578063db5d91b1116200007a578063db5d91b114620004f9578063e34fbfc81462000528578063e874eb20146200053d578063f2fde38b146200055157600080fd5b8063a1a227fa1462000497578063a4ab2faa14620004ba578063a52f433c14620004d1578063d4fab88714620004e257600080fd5b80638415482611620000f057806384154826146200040357806387059edb14620004295780638da5cb5b146200044057806398077e86146200047157600080fd5b80637281099614620003c85780638129fc1c14620003d25780638236a7ba14620003dc57600080fd5b8063440c953b116200019b57806368e10383116200016657806368e1038314620003775780636a30d26c146200038e5780636b9707d614620003a7578063715018a614620003be57600080fd5b8063440c953b14620003185780634766573814620003225780635371a2161462000339578063568699c8146200035057600080fd5b80632c77c81f11620001dc5780632c77c81f14620002575780632f0cb9e3146200026e5780633e60a22f14620002a357806343348b2f14620002e957600080fd5b80620ddd27146200020557806303e72e481462000227578063073b6ef31462000240575b600080fd5b6200020f600e5481565b6040516200021e919062001b70565b60405180910390f35b6200023e6200023836600462001cc6565b62000568565b005b6200023e6200025136600462001e61565b6200067b565b6200023e6200026836600462001f82565b62000899565b620002946200027f36600462002035565b600c6020526000908152604090205460ff1681565b6040516200021e919062002063565b620002da620002b436600462002073565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516200021e9190620020bf565b62000294620002fa366004620020cf565b6001600160a01b031660009081526020819052604090205460ff1690565b6200020f60055481565b6200023e62000333366004620020cf565b620009b1565b6200023e6200034a3660046200215c565b62000a58565b620003676200036136600462002035565b62000c0e565b6040516200021e9291906200226c565b6200023e6200038836600462002290565b62000c67565b6200039862000d01565b6040516200021e9190620023b1565b6200023e620003b8366004620020cf565b62000de4565b6200023e62000e7b565b6200023e62000e93565b6200023e62000f1e565b620003f3620003ed36600462002035565b62001108565b6040516200021e929190620023c4565b620002946200041436600462002035565b600d6020526000908152604090205460ff1681565b620003f36200043a36600462002035565b620011f8565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316620002da565b620004886200048236600462002035565b62001272565b6040516200021e9190620023d4565b600a54620004ab906001600160a01b031681565b6040516200021e919062002431565b62000294620004cb36600462002441565b62001327565b600454610100900460ff1662000294565b6200023e620004f336600462002498565b620013b9565b620002946200050a366004620020cf565b6001600160a01b031660009081526001602052604090205460ff1690565b6200023e6200053936600462002556565b5050565b600b54620004ab906001600160a01b031681565b6200023e62000562366004620020cf565b620014a2565b6200057262001500565b60006001600160a01b03166003836040516200058f9190620025c9565b908152604051908190036020019020546001600160a01b031603620005ee57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01620005ec8382620026b9565b505b80600383604051620006019190620025c9565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906200066f908490849062002786565b60405180910390a15050565b6000828152600860205260409020548114620006b45760405162461bcd60e51b8152600401620006ab90620027dd565b60405180910390fd5b60006200072689898989604051602001620006d394939291906200284d565b6040516020818303038152906040528051906020012086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200157892505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620007645760405162461bcd60e51b8152600401620006ab90620028cc565b600e8990556000805b87518110156200087457600b5488516001600160a01b039091169063b6aed0cb908a9084908110620007a357620007a3620028de565b6020026020010151620007b690620028ff565b426040518363ffffffff1660e01b8152600401620007d692919062002939565b600060405180830381600087803b158015620007f157600080fd5b505af115801562000806573d6000803e3d6000fd5b5050505081888281518110620008205762000820620028de565b60200260200101516200083390620028ff565b6040516020016200084692919062002939565b60405160208183030381529060405280519060200120915080806200086b906200296e565b9150506200076d565b506000908152600d60205260409020805460ff19166001179055505050505050505050565b6000620008eb8535620008b060208801886200298a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200157892505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620009295760405162461bcd60e51b8152600401620006ab90620028cc565b6001600160a01b03811660009081526001602052604090205460ff16620009645760405162461bcd60e51b8152600401620006ab9062002a18565b6200096f85620015a8565b6040517fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a5890620009a29087359062001b70565b60405180910390a15050505050565b620009bb62001500565b6001600160a01b03811660009081526020819052604090205460ff16620009f65760405162461bcd60e51b8152600401620006ab90620028cc565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e7609369062000a4d908390620020bf565b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f9062000aa990879087908790879060040162002b63565b60006040518083038186803b15801562000ac257600080fd5b505afa15801562000ad7573d6000803e3d6000fd5b5050505060008460405160200162000af0919062002ba2565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff161562000b3b5760405162461bcd60e51b8152600401620006ab9062002be5565b6001600c60008760405160200162000b54919062002ba2565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad219162000baf91908901908901620020cf565b87604001356040518363ffffffff1660e01b815260040162000bd392919062002bf7565b600060405180830381600087803b15801562000bee57600080fd5b505af115801562000c03573d6000803e3d6000fd5b505050505050505050565b60408051606080820183526000808352602083019190915291810182905260008062000c3a85620011f8565b915091508162000c505760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff161562000c8d5760405162461bcd60e51b8152600401620006ab9062002c61565b60048054600160ff1991821681179092556001600160a01b0387166000908152602081815260408083208054851686179055908490529081902080549092169092179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093690620009a2908790620020bf565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101562000ddb57838290600052602060002001805462000d4790620025eb565b80601f016020809104026020016040519081016040528092919081815260200182805462000d7590620025eb565b801562000dc65780601f1062000d9a5761010080835404028352916020019162000dc6565b820191906000526020600020905b81548152906001019060200180831162000da857829003601f168201915b50505050508152602001906001019062000d25565b50505050905090565b62000dee62001500565b6001600160a01b03811660009081526001602052604090205460ff1662000e295760405162461bcd60e51b8152600401620006ab9062002a18565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b479062000a4d908390620020bf565b62000e8562001500565b62000e91600062001655565b565b62000e9d62001500565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906336d2da909062000ee8903390600401620020bf565b600060405180830381600087803b15801562000f0357600080fd5b505af115801562000f18573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801562000f6a5750825b905060008267ffffffffffffffff16600114801562000f885750303b155b90508115801562000f97575080155b1562000fcf576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156200100457845468ff00000000000000001916680100000000000000001785555b6200100f33620016d3565b60006005556001600955604051620010279062001b5a565b604051809103906000f08015801562001044573d6000803e3d6000fd5b50600b80546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199283168117909155600a805490921681179091556040517fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf91620010af91620020bf565b60405180910390a183156200110157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290620009a29060019062002c91565b5050505050565b6040805160608082018352600080835260208084018390528385018290528582526006815284822085519384019095528454835260018501805492958694939092840191906200115890620025eb565b80601f01602080910402602001604051908101604052809291908181526020018280546200118690620025eb565b8015620011d75780601f10620011ab57610100808354040283529160200191620011d7565b820191906000526020600020905b815481529060010190602001808311620011b957829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b604080516060808201835260008083526020830191909152918101829052600083815260076020526040812054908190036200125d57505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b620012688162001108565b9250925050915091565b600281815481106200128357600080fd5b906000526020600020016000915090508054620012a090620025eb565b80601f0160208091040260200160405190810160405280929190818152602001828054620012ce90620025eb565b80156200131f5780601f10620012f3576101008083540402835291602001916200131f565b820191906000526020600020905b8154815290600101906020018083116200130157829003601f168201915b505050505081565b600080805b8351811015620013a057818482815181106200134c576200134c620028de565b60200260200101516200135f90620028ff565b6040516020016200137292919062002939565b604051602081830303815290604052805190602001209150808062001397906200296e565b9150506200132c565b506000908152600d602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff1680620013f55760405162461bcd60e51b8152600401620006ab9062002cfa565b8115620014775760006200142e878786604051602001620014199392919062002d3b565b604051602081830303815290604052620016e8565b905060006200143e828762001578565b9050876001600160a01b0316816001600160a01b031614620014745760405162461bcd60e51b8152600401620006ab9062002dbe565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b620014ac62001500565b6001600160a01b038116620014f25760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620006ab9190620020bf565b620014fd8162001655565b50565b33620015337f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161462000e9157336040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401620006ab9190620020bf565b6000806000806200158a868662001727565b9250925092506200159c828262001778565b50909150505b92915050565b803560009081526006602052604090208190620015c6828262002f61565b50506009546000908152600760205260409020813590819055620015ec60014362002f6d565b406040516020016200160092919062002939565b60408051601f19818403018152918152815160209283012060098054600090815260089094529183205580549162001638836200296e565b919050555060055481604001351115620014fd5760400135600555565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b620016dd6200188e565b620014fd81620018f6565b6000620016f6825162001900565b826040516020016200170a92919062002f83565b604051602081830303815290604052805190602001209050919050565b60008060008351604103620017655760208401516040850151606086015160001a6200175688828585620019a8565b95509550955050505062001771565b50508151600091506002905b9250925092565b60008260038111156200178f576200178f62002fc3565b0362001799575050565b6001826003811115620017b057620017b062002fc3565b03620017e8576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115620017ff57620017ff62002fc3565b036200183b576040517ffce698f7000000000000000000000000000000000000000000000000000000008152620006ab90829060040162001b70565b600382600381111562001852576200185262002fc3565b036200053957806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401620006ab919062001b70565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662000e91576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620014ac6200188e565b606060006200190f8362001a71565b600101905060008167ffffffffffffffff81111562001932576200193262001b80565b6040519080825280601f01601f1916602001820160405280156200195d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508462001967575b509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115620019e5575060009150600390508262001a67565b60006001888888886040516000815260200160405260405162001a0c949392919062002fe3565b6020604051602081039080840390855afa15801562001a2f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811662001a5d5750600092506001915082905062001a67565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831062001abb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831062001ae8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831062001b0757662386f26fc10000830492506010015b6305f5e100831062001b20576305f5e100830492506008015b612710831062001b3557612710830492506004015b6064831062001b48576064830492506002015b600a8310620015a25760010192915050565b611cd0806200302183390190565b805b82525050565b60208101620015a2828462001b68565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171562001bbf5762001bbf62001b80565b6040525050565b600062001bd260405190565b905062001be0828262001b96565b919050565b600067ffffffffffffffff82111562001c025762001c0262001b80565b601f19601f83011660200192915050565b82818337506000910152565b600062001c3662001c308462001be5565b62001bc6565b90508281526020810184848401111562001c535762001c53600080fd5b620019a084828562001c13565b600082601f83011262001c765762001c76600080fd5b813562001c8884826020860162001c1f565b949350505050565b60006001600160a01b038216620015a2565b62001cad8162001c90565b8114620014fd57600080fd5b8035620015a28162001ca2565b6000806040838503121562001cde5762001cde600080fd5b823567ffffffffffffffff81111562001cfa5762001cfa600080fd5b62001d088582860162001c60565b925050602062001d1b8582860162001cb9565b9150509250929050565b8062001cad565b8035620015a28162001d25565b600067ffffffffffffffff82111562001d565762001d5662001b80565b5060209081020190565b600062001d7162001c308462001d39565b8381529050602080820190840283018581111562001d925762001d92600080fd5b835b8181101562001dd757803567ffffffffffffffff81111562001db95762001db9600080fd5b850162001dc7888262001c60565b8452506020928301920162001d94565b5050509392505050565b600082601f83011262001df75762001df7600080fd5b813562001c8884826020860162001d60565b60008083601f84011262001e205762001e20600080fd5b50813567ffffffffffffffff81111562001e3d5762001e3d600080fd5b60208301915083600182028301111562001e5a5762001e5a600080fd5b9250929050565b60008060008060008060008060e0898b03121562001e825762001e82600080fd5b600062001e908b8b62001d2c565b985050602062001ea38b828c0162001d2c565b975050604062001eb68b828c0162001d2c565b965050606089013567ffffffffffffffff81111562001ed85762001ed8600080fd5b62001ee68b828c0162001de1565b955050608089013567ffffffffffffffff81111562001f085762001f08600080fd5b62001f168b828c0162001e09565b945094505060a062001f2b8b828c0162001d2c565b92505060c062001f3e8b828c0162001d2c565b9150509295985092959890939650565b60006060828403121562001f655762001f65600080fd5b50919050565b60006020828403121562001f655762001f65600080fd5b6000806000806060858703121562001f9d5762001f9d600080fd5b843567ffffffffffffffff81111562001fb95762001fb9600080fd5b62001fc78782880162001f4e565b945050602085013567ffffffffffffffff81111562001fe95762001fe9600080fd5b62001ff78782880162001e09565b9350935050604085013567ffffffffffffffff8111156200201b576200201b600080fd5b620020298782880162001f6b565b91505092959194509250565b6000602082840312156200204c576200204c600080fd5b600062001c88848462001d2c565b80151562001b6a565b60208101620015a282846200205a565b6000602082840312156200208a576200208a600080fd5b813567ffffffffffffffff811115620020a657620020a6600080fd5b62001c888482850162001c60565b62001b6a8162001c90565b60208101620015a28284620020b4565b600060208284031215620020e657620020e6600080fd5b600062001c88848462001cb9565b60006080828403121562001f655762001f65600080fd5b60008083601f840112620021225762002122600080fd5b50813567ffffffffffffffff8111156200213f576200213f600080fd5b60208301915083602082028301111562001e5a5762001e5a600080fd5b60008060008060c08587031215620021775762002177600080fd5b6000620021858787620020f4565b945050608085013567ffffffffffffffff811115620021a757620021a7600080fd5b620021b5878288016200210b565b935093505060a0620020298782880162001d2c565b60005b83811015620021e7578181015183820152602001620021cd565b50506000910152565b6000620021fb825190565b80845260208401935062002214818560208601620021ca565b601f01601f19169290920192915050565b805160009060608401906200223b858262001b68565b5060208301518482036020860152620022558282620021f0565b9150506040830151620019a0604086018262001b68565b604081016200227c828562001b68565b818103602083015262001c88818462002225565b600080600080600060608688031215620022ad57620022ad600080fd5b6000620022bb888862001cb9565b955050602086013567ffffffffffffffff811115620022dd57620022dd600080fd5b620022eb8882890162001e09565b9450945050604086013567ffffffffffffffff8111156200230f576200230f600080fd5b6200231d8882890162001e09565b92509250509295509295909350565b60006200233a8383620021f0565b9392505050565b60200190565b600062002352825190565b808452602084019350836020820285016200236d8560200190565b60005b84811015620023a557838303885281516200238c84826200232c565b9350506020820160209890980197915060010162002370565b50909695505050505050565b602080825281016200233a818462002347565b604081016200227c82856200205a565b602080825281016200233a8184620021f0565b6000620015a26001600160a01b03831662002400565b90565b6001600160a01b031690565b6000620015a282620023e7565b6000620015a2826200240c565b62001b6a8162002419565b60208101620015a2828462002426565b600060208284031215620024585762002458600080fd5b813567ffffffffffffffff811115620024745762002474600080fd5b62001c888482850162001de1565b80151562001cad565b8035620015a28162002482565b600080600080600060a08688031215620024b557620024b5600080fd5b6000620024c3888862001cb9565b9550506020620024d68882890162001cb9565b945050604086013567ffffffffffffffff811115620024f857620024f8600080fd5b620025068882890162001c60565b935050606086013567ffffffffffffffff811115620025285762002528600080fd5b620025368882890162001c60565b925050608062002549888289016200248b565b9150509295509295909350565b600080602083850312156200256e576200256e600080fd5b823567ffffffffffffffff8111156200258a576200258a600080fd5b620025988582860162001e09565b92509250509250929050565b6000620025af825190565b620025bf818560208601620021ca565b9290920192915050565b620015a28183620025a4565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200260057607f821691505b60208210810362001f655762001f65620025d5565b6000620015a2620023fd8381565b6200262e8362002615565b815460001960089490940293841b1916921b91909117905550565b60006200265881848462002623565b505050565b8181101562000539576200267360008262002649565b6001016200265d565b601f82111562002658576000818152602090206020601f85010481016020851015620026a55750805b620011016020601f8601048301826200265d565b815167ffffffffffffffff811115620026d657620026d662001b80565b620026e28254620025eb565b620026ef8282856200267c565b506020601f8211600181146200272757600083156200270e5750848201515b600019600885021c198116600285021785555062001101565b600084815260208120601f198516915b8281101562002759578785015182556020948501946001909201910162002737565b5084821015620027775783870151600019601f87166008021c191681555b50505050600202600101905550565b60408082528101620027998185620021f0565b90506200233a6020830184620020b4565b600e8152602081017f496e76616c696420666f726b49440000000000000000000000000000000000008152905062002341565b60208082528101620015a281620027aa565b6000620027fa825190565b80845260208401935083602082028501620028158560200190565b60005b84811015620023a557838303885281516200283484826200232c565b9350506020820160209890980197915060010162002818565b608081016200285d828762001b68565b6200286c602083018662001b68565b6200287b604083018562001b68565b81810360608301526200288f8184620027ef565b9695505050505050565b60168152602081017f656e636c6176654944206e6f74206174746573746564000000000000000000008152905062002341565b60208082528101620015a28162002899565b634e487b7160e01b600052603260045260246000fd5b6000620015a2825190565b60006200290a825190565b602083016200291981620028f4565b925050602081101562001f65576000196020919091036008021b16919050565b6040810162002949828562001b68565b6200233a602083018462001b68565b634e487b7160e01b600052601160045260246000fd5b60006001820162002983576200298362002958565b5060010190565b6000808335601e1936859003018112620029a757620029a7600080fd5b8301915050803567ffffffffffffffff811115620029c857620029c8600080fd5b60208201915060018102360382131562001e5a5762001e5a600080fd5b60198152602081017f656e636c6176654944206e6f7420612073657175656e636572000000000000008152905062002341565b60208082528101620015a281620029e5565b506000620015a2602083018362001cb9565b506000620015a2602083018362001d2c565b67ffffffffffffffff811662001cad565b8035620015a28162002a4e565b506000620015a2602083018362002a5f565b67ffffffffffffffff811662001b6a565b62002a9b818062002a2a565b62002aa78382620020b4565b5062002ab7602082018262002a2a565b62002ac66020840182620020b4565b5062002ad6604082018262002a3c565b62002ae5604084018262001b68565b5062002af5606082018262002a6c565b62002658606084018262002a7e565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111562002b4a5762002b4a600080fd5b60208302925062002b5d83858462002b04565b50500190565b60c0810162002b73828762002a8f565b818103608083015262002b8881858762002b0d565b905062002b9960a083018462001b68565b95945050505050565b60808101620015a2828462002a8f565b60188152602081017f7769746864726177616c20616c7265616479207370656e7400000000000000008152905062002341565b60208082528101620015a28162002bb2565b60408101620029498285620020b4565b60228152602081017f6e6574776f726b2073656372657420616c726561647920696e697469616c697a81527f6564000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101620015a28162002c07565b600067ffffffffffffffff8216620015a2565b62001b6a8162002c73565b60208101620015a2828462002c86565b60238152602081017f726573706f6e64696e67206174746573746572206973206e6f7420617474657381527f74656400000000000000000000000000000000000000000000000000000000006020820152905062002c5b565b60208082528101620015a28162002ca1565b6000620015a28260601b90565b6000620015a28262002d0c565b62001b6a62002d358262001c90565b62002d19565b62002d47818562002d26565b60140162002d56818462002d26565b60140162001c888183620025a4565b602c8152602081017f63616c63756c61746564206164647265737320616e642061747465737465724981527f4420646f6e74206d6174636800000000000000000000000000000000000000006020820152905062002c5b565b60208082528101620015a28162002d65565b60008135620015a28162001d25565b600081620015a2565b62002df38262002ddf565b62002e02620023fd8262002ddf565b8255505050565b8267ffffffffffffffff81111562002e255762002e2562001b80565b62002e318254620025eb565b62002e3e8282856200267c565b506000601f82116001811462002e76576000831562002e5d5750848201355b600019600885021c198116600285021785555062002ed3565b600084815260209020601f19841690835b8281101562002ea9578785013582556020948501946001909201910162002e87565b508482101562002ec757600019601f86166008021c19848801351681555b50506001600284020184555b505050505050565b6200265883838362002e09565b62002ef38262002615565b8062002e02565b80828062002f088162002dd0565b905062002f16818462002de8565b505050600181016020830162002f2d81856200298a565b915062002f3c82828562002edb565b50505060028101604083018062002f538262002dd0565b905062001101818462002ee8565b62000539828262002efa565b81810381811115620015a257620015a262002958565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152601a0162002fb58184620025a4565b90506200233a8183620025a4565b634e487b7160e01b600052602160045260246000fd5b60ff811662001b6a565b6080810162002ff3828762001b68565b62003002602083018662002fd9565b62003011604083018562001b68565b62002b99606083018462001b6856fe60806040523480156200001157600080fd5b50338062000040576000604051631e4fbdf760e01b8152600401620000379190620000c6565b60405180910390fd5b6200004b8162000052565b50620000d6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b620000c081620000a2565b82525050565b60208101620000af8284620000b5565b611bea80620000e66000396000f3fe6080604052600436106100e15760003560e01c80639730886d1161007f578063b201246f11610059578063b201246f146102d4578063b6aed0cb146102f4578063e138a8d214610314578063f2fde38b1461033457610155565b80639730886d1461026757806399a3ad2114610287578063b1454caa146102a757610155565b8063346633fb116100bb578063346633fb146101f957806336d2da901461020c578063715018a61461022c5780638da5cb5b1461024157610155565b80630fcfbd11146101765780630fe9188e146101ac57806333a88c72146101cc57610155565b36610155576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101269033908390600401610b86565b6000604051808303818588803b15801561013f57600080fd5b505af1158015610153573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161016d90610bd5565b60405180910390fd5b34801561018257600080fd5b50610196610191366004610c00565b610354565b6040516101a39190610c3b565b60405180910390f35b3480156101b857600080fd5b506101536101c7366004610c61565b6103b4565b3480156101d857600080fd5b506101ec6101e7366004610c00565b6103fa565b6040516101a39190610c8a565b610153610207366004610cac565b61044d565b34801561021857600080fd5b50610153610227366004610ce9565b6104d7565b34801561023857600080fd5b50610153610556565b34801561024d57600080fd5b506000546001600160a01b03166040516101a39190610d0a565b34801561027357600080fd5b50610153610282366004610d18565b61056a565b34801561029357600080fd5b506101536102a2366004610cac565b610666565b3480156102b357600080fd5b506102c76102c2366004610dd1565b6106e6565b6040516101a39190610e65565b3480156102e057600080fd5b506101536102ef366004610ed3565b61073f565b34801561030057600080fd5b5061015361030f366004610f43565b610840565b34801561032057600080fd5b5061015361032f366004610f65565b610886565b34801561034057600080fd5b5061015361034f366004610ce9565b610965565b600080826040516020016103689190611182565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806103ad5760405162461bcd60e51b815260040161016d906111d1565b9392505050565b6103bc6109bc565b60008181526004602052604081205490036103e95760405162461bcd60e51b815260040161016d90611213565b600090815260046020526040812055565b6000808260405160200161040e9190611182565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906104455750428111155b949350505050565b60003411801561045c57508034145b6104785760405162461bcd60e51b815260040161016d9061127b565b600061048333610a02565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516104ca92919061128b565b60405180910390a3505050565b6104df6109bc565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461052c576040519150601f19603f3d011682016040523d82523d6000602084013e610531565b606091505b50509050806105525760405162461bcd60e51b815260040161016d906112d8565b5050565b61055e6109bc565b6105686000610a60565b565b6105726109bc565b600061057e82426112fe565b90506000836040516020016105939190611182565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150156105d85760405162461bcd60e51b815260040161016d90611369565b60008181526001602090815260408220849055600291906105fb90870187610ce9565b6001600160a01b0316815260208101919091526040016000908120906106276080870160608801611379565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902085916004020161065e82826117e0565b505050505050565b61066e6109bc565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146106bb576040519150601f19603f3d011682016040523d82523d6000602084013e6106c0565b606091505b50509050806106e15760405162461bcd60e51b815260040161016d906112d8565b505050565b60006106f133610a02565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef7759373382888888888860405161072e97969594939291906117ea565b60405180910390a195945050505050565b600081815260046020526040812054900361076c5760405162461bcd60e51b815260040161016d906118a5565b60008181526004602052604090205442101561079a5760405162461bcd60e51b815260040161016d906118f1565b6000846040516020016107ad9190611976565b604051602081830303815290604052805190602001206040516020016107d391906119b6565b60405160208183030381529060405280519060200120905061081d8484848460405160200161080291906119d5565b60405160208183030381529060405280519060200120610ac8565b6108395760405162461bcd60e51b815260040161016d90611a3f565b5050505050565b6108486109bc565b600082815260046020526040902054156108745760405162461bcd60e51b815260040161016d90611aa7565b60009182526004602052604090912055565b60008181526004602052604081205490036108b35760405162461bcd60e51b815260040161016d906118a5565b6000818152600460205260409020544210156108e15760405162461bcd60e51b815260040161016d906118f1565b6000846040516020016108f49190611182565b6040516020818303038152906040528051906020012060405160200161091a9190611ae9565b6040516020818303038152906040528051906020012090506109498484848460405160200161080291906119d5565b6108395760405162461bcd60e51b815260040161016d90611b51565b61096d6109bc565b6001600160a01b0381166109b05760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161016d9190610d0a565b6109b981610a60565b50565b6000546001600160a01b0316331461056857336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161016d9190610d0a565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff169160019190610a358385611b61565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082610ad6868685610ae0565b1495945050505050565b600081815b84811015610b2357610b0f82878784818110610b0357610b03611b85565b90506020020135610b2c565b915080610b1b81611b9b565b915050610ae5565b50949350505050565b6000818310610b48576000828152602084905260409020610b57565b60008381526020839052604090205b90505b92915050565b60006001600160a01b038216610b5a565b610b7a81610b60565b82525050565b80610b7a565b60408101610b948285610b71565b6103ad6020830184610b80565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610b5a81610ba1565b600060c08284031215610bfa57610bfa600080fd5b50919050565b600060208284031215610c1557610c15600080fd5b813567ffffffffffffffff811115610c2f57610c2f600080fd5b61044584828501610be5565b60208101610b5a8284610b80565b805b81146109b957600080fd5b8035610b5a81610c49565b600060208284031215610c7657610c76600080fd5b60006104458484610c56565b801515610b7a565b60208101610b5a8284610c82565b610c4b81610b60565b8035610b5a81610c98565b60008060408385031215610cc257610cc2600080fd5b6000610cce8585610ca1565b9250506020610cdf85828601610c56565b9150509250929050565b600060208284031215610cfe57610cfe600080fd5b60006104458484610ca1565b60208101610b5a8284610b71565b60008060408385031215610d2e57610d2e600080fd5b823567ffffffffffffffff811115610d4857610d48600080fd5b610cce85828601610be5565b63ffffffff8116610c4b565b8035610b5a81610d54565b60008083601f840112610d8057610d80600080fd5b50813567ffffffffffffffff811115610d9b57610d9b600080fd5b602083019150836001820283011115610db657610db6600080fd5b9250929050565b60ff8116610c4b565b8035610b5a81610dbd565b600080600080600060808688031215610dec57610dec600080fd5b6000610df88888610d60565b9550506020610e0988828901610d60565b945050604086013567ffffffffffffffff811115610e2957610e29600080fd5b610e3588828901610d6b565b93509350506060610e4888828901610dc6565b9150509295509295909350565b67ffffffffffffffff8116610b7a565b60208101610b5a8284610e55565b600060808284031215610bfa57610bfa600080fd5b60008083601f840112610e9d57610e9d600080fd5b50813567ffffffffffffffff811115610eb857610eb8600080fd5b602083019150836020820283011115610db657610db6600080fd5b60008060008060c08587031215610eec57610eec600080fd5b6000610ef88787610e73565b945050608085013567ffffffffffffffff811115610f1857610f18600080fd5b610f2487828801610e88565b935093505060a0610f3787828801610c56565b91505092959194509250565b60008060408385031215610f5957610f59600080fd5b6000610cce8585610c56565b60008060008060608587031215610f7e57610f7e600080fd5b843567ffffffffffffffff811115610f9857610f98600080fd5b610fa487828801610be5565b945050602085013567ffffffffffffffff811115610fc457610fc4600080fd5b610fd087828801610e88565b93509350506040610f3787828801610c56565b506000610b5a6020830183610ca1565b67ffffffffffffffff8116610c4b565b8035610b5a81610ff3565b506000610b5a6020830183611003565b506000610b5a6020830183610d60565b63ffffffff8116610b7a565b6000808335601e193685900301811261105557611055600080fd5b830160208101925035905067ffffffffffffffff81111561107857611078600080fd5b36819003821315610db657610db6600080fd5b82818337506000910152565b8183526020830192506110ab82848361108b565b50601f01601f19160190565b506000610b5a6020830183610dc6565b60ff8116610b7a565b600060c083016110e08380610fe3565b6110ea8582610b71565b506110f8602084018461100e565b6111056020860182610e55565b50611113604084018461101e565b611120604086018261102e565b5061112e606084018461101e565b61113b606086018261102e565b50611149608084018461103a565b858303608087015261115c838284611097565b9250505061116d60a08401846110b7565b61117a60a08601826110c7565b509392505050565b60208082528101610b5781846110d0565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b60208082528101610b5a81611193565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050610bcf565b60208082528101610b5a816111e1565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506111cb565b60208082528101610b5a81611223565b604081016112998285610b80565b6103ad6020830184610e55565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610bcf565b60208082528101610b5a816112a6565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b5a57610b5a6112e8565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506111cb565b60208082528101610b5a81611311565b60006020828403121561138e5761138e600080fd5b60006104458484610d60565b60008135610b5a81610c98565b60006001600160a01b03835b81169019929092169190911792915050565b6000610b5a6001600160a01b0383166113dc565b90565b6001600160a01b031690565b6000610b5a826113c5565b6000610b5a826113e8565b611407826113f3565b6114128183546113a7565b8255505050565b60008135610b5a81610ff3565b60007bffffffffffffffff00000000000000000000000000000000000000006113b38460a01b90565b600067ffffffffffffffff8216610b5a565b61146a8261144f565b611412818354611426565b60008135610b5a81610d54565b60007fffffffff000000000000000000000000000000000000000000000000000000006113b38460e01b90565b600063ffffffff8216610b5a565b6114c6826114af565b611412818354611482565b600063ffffffff836113b3565b6114e7826114af565b6114128183546114d1565b6000808335601e193685900301811261150d5761150d600080fd5b8301915050803567ffffffffffffffff81111561152c5761152c600080fd5b602082019150600181023603821315610db657610db6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061158757607f821691505b602082108103610bfa57610bfa61155d565b6000610b5a6113d98381565b6115ae83611599565b815460001960089490940293841b1916921b91909117905550565b60006106e18184846115a5565b81811015610552576115e96000826115c9565b6001016115d6565b601f8211156106e1576000818152602090206020601f850104810160208510156116185750805b6108396020601f8601048301826115d6565b8267ffffffffffffffff81111561164357611643611547565b61164d8254611573565b6116588282856115f1565b506000601f82116001811461168d57600083156116755750848201355b600019600885021c198116600285021785555061065e565b600084815260209020601f19841690835b828110156116be578785013582556020948501946001909201910161169e565b50848210156116db57600019601f86166008021c19848801351681555b5050505060020260010190555050565b6106e183838361162a565b60008135610b5a81610dbd565b600060ff836113b3565b600060ff8216610b5a565b6117218261170d565b611412818354611703565b8082806117388161139a565b905061174481846113fe565b5050602083018061175482611419565b90506117608184611461565b5050604083018061177082611475565b905061177c81846114bd565b50505060018101606083018061179182611475565b905061179d81846114de565b50505060028101608083016117b281856114f2565b91506117bf8282856116eb565b5050506003810160a08301806117d4826116f6565b90506108398184611718565b610552828261172c565b60c081016117f8828a610b71565b6118056020830189610e55565b611812604083018861102e565b61181f606083018761102e565b8181036080830152611832818587611097565b905061184160a08301846110c7565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506111cb565b60208082528101610b5a8161184d565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506111cb565b60208082528101610b5a816118b5565b506000610b5a6020830183610c56565b61191b8180610fe3565b6119258382610b71565b506119336020820182610fe3565b6119406020840182610b71565b5061194e6040820182611901565b61195b6040840182610b80565b50611969606082018261100e565b6106e16060840182610e55565b60808101610b5a8284611911565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050610bcf565b604080825281016119c681611984565b9050610b5a6020830184610b80565b6119df8183610b80565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506111cb565b60208082528101610b5a816119e7565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506111cb565b60208082528101610b5a81611a4f565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050610bcf565b604080825281016119c681611ab7565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506111cb565b60208082528101610b5a81611af9565b67ffffffffffffffff918216919081169082820190811115610b5a57610b5a6112e8565b634e487b7160e01b600052603260045260246000fd5b600060018201611bad57611bad6112e8565b506001019056fea2646970667358221220c8293ff525ddcfd01a52b0bf26c4071757f9277603389aebc8011c7267aa4e7064736f6c63430008140033a26469706673582212206b17a368e4239a29edb4a68cfa5b61f21f9cf204c6920f230bc657c463a0b7de64736f6c63430008140033", } // ManagementContractABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/Math/Math.go b/contracts/generated/Math/Math.go index 67c17f203f..4a4e7ae61b 100644 --- a/contracts/generated/Math/Math.go +++ b/contracts/generated/Math/Math.go @@ -32,7 +32,7 @@ var ( // MathMetaData contains all meta data concerning the Math contract. var MathMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"MathOverflowedMulDiv\",\"type\":\"error\"}]", - Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea2646970667358221220bdd5bf975486d3655ac7d6ea3a223a2454098c34fb07eb9098d1304bc7c4917664736f6c63430008140033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f93dbf057c351e267c96ba7e12cf3ec4eddf62f98eaf43eb22ad92eaefa402b764736f6c63430008140033", } // MathABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/MerkleProof/MerkleProof.go b/contracts/generated/MerkleProof/MerkleProof.go index 342676b4bf..27b6557ad2 100644 --- a/contracts/generated/MerkleProof/MerkleProof.go +++ b/contracts/generated/MerkleProof/MerkleProof.go @@ -32,7 +32,7 @@ var ( // MerkleProofMetaData contains all meta data concerning the MerkleProof contract. var MerkleProofMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"MerkleProofInvalidMultiproof\",\"type\":\"error\"}]", - Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea26469706673582212200e92957113486a6da1e9c617616e23fd590c60b12d8acde1767e2e4f3b9111f864736f6c63430008140033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122080442f2339b8ab59fa4383dcc9d3015c47c095fcd92fcb1469919dc03ae053dc64736f6c63430008140033", } // MerkleProofABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go index 046c47ca1f..2c0183caf4 100644 --- a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go +++ b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go @@ -50,7 +50,7 @@ type StructsValueTransferMessage struct { // MerkleTreeMessageBusMetaData contains all meta data concerning the MerkleTreeMessageBus contract. var MerkleTreeMessageBusMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"LogMessagePublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"name\":\"ValueTransfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"activationTime\",\"type\":\"uint256\"}],\"name\":\"addStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"name\":\"disableStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"getMessageTimeOfFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"publishMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveValueFromL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"retrieveAllFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendValueToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"finalAfterTimestamp\",\"type\":\"uint256\"}],\"name\":\"storeCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"verifyMessageFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyMessageInclusion\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyValueTransferInclusion\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6080604052346200002657620000146200002b565b604051611ae5620001c58239611ae590f35b600080fd5b6200003562000037565b565b62000035336200008d565b6200005562000052620000529290565b90565b6001600160a01b031690565b620000529062000042565b620000779062000055565b9052565b6020810192916200003591906200006c565b62000099600062000061565b620000a48162000055565b620000af8362000055565b14620000c15750620000359062000162565b620000e790620000d060405190565b631e4fbdf760e01b8152918291600483016200007b565b0390fd5b620000529062000055565b620000529054620000eb565b620000529062000055906001600160a01b031682565b620000529062000102565b620000529062000118565b9062000142620000526200015e9262000123565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200016e6000620000f6565b906200017c8160006200012e565b620001b3620001ac7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000123565b9162000123565b91620001be60405190565b600090a356fe6080604052600436101561001d575b366119cf5761001b611a3d565b005b60003560e01c80630fcfbd11146100fd5780630fe9188e146100f857806333a88c72146100f3578063346633fb146100ee57806336d2da90146100e9578063715018a6146100e45780638da5cb5b146100df5780639730886d146100da57806399a3ad21146100d5578063b1454caa146100d0578063b201246f146100cb578063b6aed0cb146100c6578063e138a8d2146100c15763f2fde38b0361000e57610560565b610544565b6104d4565b61049e565b6103e2565b610316565b6102fd565b610291565b610279565b610256565b61022e565b6101b6565b610199565b610140565b908160c09103126101105790565b600080fd5b9060208282031261011057813567ffffffffffffffff81116101105761013b9201610102565b90565b565b346101105761016b61015b610156366004610115565b61142d565b6040519182918290815260200190565b0390f35b805b0361011057565b9050359061013e8261016f565b906020828203126101105761013b91610178565b34610110576101b16101ac366004610185565b61091b565b604051005b346101105761016b6101d16101cc366004610115565b61138a565b60405191829182901515815260200190565b6001600160a01b031690565b6001600160a01b038116610171565b9050359061013e826101ef565b91906040838203126101105761013b9061022581856101fe565b93602001610178565b6101b161023c36600461020b565b90611084565b906020828203126101105761013b916101fe565b34610110576101b1610269366004610242565b6119c6565b600091031261011057565b346101105761028936600461026e565b6101b16105b0565b34610110576102a136600461026e565b61016b6102b66000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b91906040838203126101105782359067ffffffffffffffff8211610110576102258161013b938601610102565b34610110576101b16103103660046102d0565b90611996565b34610110576101b161032936600461020b565b906112c0565b63ffffffff8116610171565b9050359061013e8261032f565b909182601f830112156101105781359167ffffffffffffffff831161011057602001926001830284011161011057565b60ff8116610171565b9050359061013e82610378565b919091608081840312610110576103a5838261033b565b926103b3816020840161033b565b92604083013567ffffffffffffffff8111610110576103d78361013b928601610348565b939094606001610381565b346101105761016b6104016103f836600461038e565b93929092611331565b6040519182918267ffffffffffffffff909116815260200190565b908160809103126101105790565b909182601f830112156101105781359167ffffffffffffffff831161011057602001926020830284011161011057565b9060c0828203126101105761046f818361041c565b92608083013567ffffffffffffffff8111610110576104938361013b92860161042a565b93909460a001610178565b34610110576101b16104b136600461045a565b92919091610f8a565b91906040838203126101105761013b906102258185610178565b34610110576101b16104e73660046104ba565b90610876565b9060608282031261011057813567ffffffffffffffff81116101105781610515918401610102565b92602083013567ffffffffffffffff8111610110576105398361013b92860161042a565b939094604001610178565b34610110576101b16105573660046104ed565b92919091610c62565b34610110576101b1610573366004610242565b6106a1565b6105806105b8565b61013e61059e565b6101e361013b61013b9290565b61013b90610588565b61013e6105ab6000610595565b610702565b61013e610578565b60005433906001600160a01b03168190036105d05750565b61061a906105dd60405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b61013e9061062a6105b8565b6106346000610595565b6001600160a01b0381166001600160a01b03831614610657575061013e90610702565b61061a9061066460405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61013e9061061e565b906001600160a01b03905b9181191691161790565b6101e361013b61013b926001600160a01b031690565b61013b906106bf565b61013b906106d5565b906106f761013b6106fe926106de565b82546106aa565b9055565b6000546001600160a01b03169061071a8160006106e7565b61074d6107477f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936106de565b916106de565b9161075760405190565b80805b0390a3565b9061013e9161076c6105b8565b610836565b905b600052602052604060002090565b61013b9081565b61013b9054610781565b61013b61013b61013b9290565b0190565b156107aa57565b60405162461bcd60e51b815260206004820152602560248201527f526f6f7420616c726561647920616464656420746f20746865206d657373616760448201527f65206275730000000000000000000000000000000000000000000000000000006064820152608490fd5b90600019906106b5565b9061082f61013b6106fe92610792565b8254610815565b9061087161013e92600461086c6108556108508484610771565b610788565b6108666108626000610792565b9190565b146107a3565b610771565b61081f565b9061013e9161075f565b61013e9061088c6105b8565b6108dd565b1561089857565b60405162461bcd60e51b815260206004820152601a60248201527f537461746520726f6f7420646f6573206e6f742065786973742e0000000000006044820152606490fd5b61013e906108716004916109156108f76108508386610771565b61091060009161090961086284610792565b1415610891565b610792565b92610771565b61013e90610880565b1561092b57565b60405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201527f7373616765206275732e000000000000000000000000000000000000000000006064820152608490fd5b1561099d57565b60405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608490fd5b5061013b9060208101906101fe565b67ffffffffffffffff8116610171565b9050359061013e826109fb565b5061013b906020810190610a0b565b5061013b90602081019061033b565b9035601e19368390030181121561011057016020813591019167ffffffffffffffff82116101105736829003831361011057565b90826000939282370152565b9190610a9481610a8d8161079f9560209181520190565b8095610a6a565b601f01601f191690565b5061013b906020810190610381565b9061013b9060a0610b58610b4e60c08401610ad8610acb88806109ec565b6001600160a01b03168652565b610af9610ae86020890189610a18565b67ffffffffffffffff166020870152565b610b16610b096040890189610a27565b63ffffffff166040870152565b610b33610b266060890189610a27565b63ffffffff166060870152565b610b406080880188610a36565b908683036080880152610a76565b9482810190610a9e565b60ff16910152565b602080825261013b92910190610aad565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff821117610ba957604052565b610b71565b60408082526001908201527f6d000000000000000000000000000000000000000000000000000000000000006060820152919061013e90602060808501940152565b15610bf757565b60405162461bcd60e51b815260206004820152603060248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7360448201527f7320636861696e206d6573736167652e000000000000000000000000000000006064820152608490fd5b92610d469261013e94610caf6004610c94610c806108508784610771565b610c8d6108626000610792565b1415610924565b610ca861086261013b610850884295610771565b1015610996565b610cd7610cbb60405190565b8092610ccb602083019182610b60565b90810382520382610b87565b610ce9610ce2825190565b9160200190565b20610d06610cf660405190565b8092610ccb602083019182610bae565b610d11610ce2825190565b20610d34610d1e60405190565b8092610ccb60208301918261079f816020939052565b610d3f610ce2825190565b2092610d4b565b610bf0565b610d6a929361086292610d6692610d60600090565b50610dcd565b9290565b1490565b634e487b7160e01b600052601160045260246000fd5b6000198114610d935760010190565b610d6e565b634e487b7160e01b600052603260045260246000fd5b9190811015610dbe576020020190565b610d98565b3561013b8161016f565b610dd76000610792565b925b82841015610e0d57610e01610e0791610dfb610df6878787610dae565b610dc3565b90610e14565b93610d84565b92610dd9565b9250505090565b81811015610e2f579061013b91600052602052604060002090565b61013b91600052602052604060002090565b5061013b906020810190610178565b906060610eb761013e93610e77610e6a60008301836109ec565b6001600160a01b03168552565b610e97610e8760208301836109ec565b6001600160a01b03166020860152565b610eae610ea76040830183610e41565b6040860152565b82810190610a18565b67ffffffffffffffff16910152565b60808101929161013e9190610e50565b60408082526001908201527f76000000000000000000000000000000000000000000000000000000000000006060820152919061013e90602060808501940152565b15610f1f57565b60405162461bcd60e51b815260206004820152603360248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7560448201527f65207472616e73666572206d6573736167652e000000000000000000000000006064820152608490fd5b92610fec9261013e94610fa86004610c94610c806108508784610771565b610fc4610fb460405190565b8092610ccb602083019182610ec6565b610fcf610ce2825190565b20610d06610fdc60405190565b8092610ccb602083019182610ed6565b610f18565b15610ff857565b60405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e67204574686572000000000000000000000000000000006064820152608490fd5b90815260408101929161013e916020905b019067ffffffffffffffff169052565b6110a234926110936000610792565b841190816110f5575b50610ff1565b336110ac81611191565b6110df6110d97f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6936106de565b936106de565b9361075a6110ec60405190565b92839283611063565b905083143861109c565b90610773906106de565b61013b905b67ffffffffffffffff1690565b61013b9054611109565b61110e61013b61013b9290565b67ffffffffffffffff9081169116019067ffffffffffffffff8211610d9357565b9067ffffffffffffffff906106b5565b61110e61013b61013b9267ffffffffffffffff1690565b9061118a61013b6106fe92611163565b8254611153565b9061013e60036111cf6111c06111af6111aa87856110ff565b61111b565b956111ba6001611125565b936110ff565b916111ca8361111b565b611132565b9061117a565b9061013e916111e26105b8565b61129a565b9061013e6111f460405190565b9283610b87565b67ffffffffffffffff8111610ba957602090601f01601f19160190565b9061122a611225836111fb565b6111e7565b918252565b3d156112495761123e3d611218565b903d6000602084013e565b606090565b1561125557565b60405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606490fd5b6000809161013e936112ab60405190565b90818003925af16112ba61122f565b5061124e565b9061013e916111d5565b97969461131a60a09561130d6113279661130061013e9b969760208f61107460c082019b60008301906001600160a01b03169052565b63ffffffff1660408d0152565b63ffffffff1660608b0152565b88830360808a0152610a76565b94019060ff169052565b9290919361138490611341600090565b50339261134d84611191565b9687957fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef7759379761137b60405190565b978897886112ca565b0390a190565b6108506113b991611399600090565b506113a6610cbb60405190565b6113b1610ce2825190565b206001610771565b6113c36000610792565b811190816113cf575090565b429150111590565b156113de57565b60405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d69747465646044820152601760f91b6064820152608490fd5b61085061143c91611399600090565b61013b6114496000610792565b82116113d7565b9061013e9161145d6105b8565b6118ff565b91908201809211610d9357565b1561147657565b60405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b3561013b816101ef565b3561013b8161032f565b61150861013b61013b9263ffffffff1690565b63ffffffff1690565b90610773906114f5565b8054821015610dbe57611535600491600052602060002090565b91020190600090565b634e487b7160e01b600052600060045260246000fd5b3561013b816109fb565b907bffffffffffffffff00000000000000000000000000000000000000009060a01b6106b5565b9061159561013b6106fe92611163565b825461155e565b907fffffffff000000000000000000000000000000000000000000000000000000009060e01b6106b5565b906115d761013b6106fe926114f5565b825461159c565b9063ffffffff906106b5565b906115fa61013b6106fe926114f5565b82546115de565b903590601e193682900301821215610110570180359067ffffffffffffffff8211610110576020019136829003831361011057565b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561166c575b602083101461166757565b611636565b91607f169161165c565b9160001960089290920291821b911b6106b5565b919061169b61013b6106fe93610792565b908354611676565b61013e9160009161168a565b8181106116ba575050565b806116c860006001936116a3565b016116af565b9190601f81116116dd57505050565b6116ef61013e93600052602060002090565b906020601f840181900483019310611711575b6020601f9091010401906116af565b9091508190611702565b919067ffffffffffffffff8211610ba9576117408261173a855461164c565b856116ce565b600090601f831160011461177b576106fe929160009183611770575b5050600019600883021c1916906002021790565b01359050388061175c565b601f1983169161179085600052602060002090565b92815b8181106117cd575091600293918560019694106117b4575b50505002019055565b0135600019601f84166008021c191690553880806117ab565b91936020600181928787013581550195019201611793565b9061013e929161171b565b3561013b81610378565b9060ff906106b5565b61181361013b61013b9260ff1690565b60ff1690565b9061182961013b6106fe92611803565b82546117fa565b61013e91906118b79060a09060039061187c8161185561184f886114e1565b826106e7565b61186a61186460208901611554565b82611585565b611876604088016114eb565b906115c7565b6118956001820161188f606088016114eb565b906115ea565b6118af600282016118a96080880188611601565b916117e5565b0192016117f0565b90611819565b91906118cc5761013e91611830565b61153e565b9081549168010000000000000000831015610ba957826118f991600161013e9501815561151b565b906118bd565b61199161013b61197f61191561013e9542611462565b61196c61192160405190565b6119338160208101610ccb8a82610b60565b61193e610ce2825190565b20916108716001936119536108508287610771565b9461086c60009661196661086289610792565b1461146f565b61197960029186016114e1565b906110ff565b61198b606085016114eb565b90611511565b6118d1565b9061013e91611450565b61013e906119ac6105b8565b60008061013e926119bc306106de565b316112ab60405190565b61013e906119a0565b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f727465640000000000000000000000000000000000000000006044820152606490fd5b6001600160a01b03909116815260408101929161013e9160200152565b6040513d6000823e3d90fd5b611a46306106de565b63346633fb34913390803b1561011057611a7684600094611a81611a6960405190565b9788968795869460e01b90565b845260048401611a14565b03925af18015611aaa57611a925750565b61013e906000611aa28183610b87565b81019061026e565b611a3156fea2646970667358221220f1d785fdbb2d651555a3e150a57286c72acedb6ae4e42ca19d2777f4fbfc83b664736f6c63430008140033", + Bin: "0x60806040523480156200001157600080fd5b50338062000040576000604051631e4fbdf760e01b8152600401620000379190620000c6565b60405180910390fd5b6200004b8162000052565b50620000d6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b620000c081620000a2565b82525050565b60208101620000af8284620000b5565b611bea80620000e66000396000f3fe6080604052600436106100e15760003560e01c80639730886d1161007f578063b201246f11610059578063b201246f146102d4578063b6aed0cb146102f4578063e138a8d214610314578063f2fde38b1461033457610155565b80639730886d1461026757806399a3ad2114610287578063b1454caa146102a757610155565b8063346633fb116100bb578063346633fb146101f957806336d2da901461020c578063715018a61461022c5780638da5cb5b1461024157610155565b80630fcfbd11146101765780630fe9188e146101ac57806333a88c72146101cc57610155565b36610155576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101269033908390600401610b86565b6000604051808303818588803b15801561013f57600080fd5b505af1158015610153573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161016d90610bd5565b60405180910390fd5b34801561018257600080fd5b50610196610191366004610c00565b610354565b6040516101a39190610c3b565b60405180910390f35b3480156101b857600080fd5b506101536101c7366004610c61565b6103b4565b3480156101d857600080fd5b506101ec6101e7366004610c00565b6103fa565b6040516101a39190610c8a565b610153610207366004610cac565b61044d565b34801561021857600080fd5b50610153610227366004610ce9565b6104d7565b34801561023857600080fd5b50610153610556565b34801561024d57600080fd5b506000546001600160a01b03166040516101a39190610d0a565b34801561027357600080fd5b50610153610282366004610d18565b61056a565b34801561029357600080fd5b506101536102a2366004610cac565b610666565b3480156102b357600080fd5b506102c76102c2366004610dd1565b6106e6565b6040516101a39190610e65565b3480156102e057600080fd5b506101536102ef366004610ed3565b61073f565b34801561030057600080fd5b5061015361030f366004610f43565b610840565b34801561032057600080fd5b5061015361032f366004610f65565b610886565b34801561034057600080fd5b5061015361034f366004610ce9565b610965565b600080826040516020016103689190611182565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806103ad5760405162461bcd60e51b815260040161016d906111d1565b9392505050565b6103bc6109bc565b60008181526004602052604081205490036103e95760405162461bcd60e51b815260040161016d90611213565b600090815260046020526040812055565b6000808260405160200161040e9190611182565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906104455750428111155b949350505050565b60003411801561045c57508034145b6104785760405162461bcd60e51b815260040161016d9061127b565b600061048333610a02565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516104ca92919061128b565b60405180910390a3505050565b6104df6109bc565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461052c576040519150601f19603f3d011682016040523d82523d6000602084013e610531565b606091505b50509050806105525760405162461bcd60e51b815260040161016d906112d8565b5050565b61055e6109bc565b6105686000610a60565b565b6105726109bc565b600061057e82426112fe565b90506000836040516020016105939190611182565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150156105d85760405162461bcd60e51b815260040161016d90611369565b60008181526001602090815260408220849055600291906105fb90870187610ce9565b6001600160a01b0316815260208101919091526040016000908120906106276080870160608801611379565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902085916004020161065e82826117e0565b505050505050565b61066e6109bc565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146106bb576040519150601f19603f3d011682016040523d82523d6000602084013e6106c0565b606091505b50509050806106e15760405162461bcd60e51b815260040161016d906112d8565b505050565b60006106f133610a02565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef7759373382888888888860405161072e97969594939291906117ea565b60405180910390a195945050505050565b600081815260046020526040812054900361076c5760405162461bcd60e51b815260040161016d906118a5565b60008181526004602052604090205442101561079a5760405162461bcd60e51b815260040161016d906118f1565b6000846040516020016107ad9190611976565b604051602081830303815290604052805190602001206040516020016107d391906119b6565b60405160208183030381529060405280519060200120905061081d8484848460405160200161080291906119d5565b60405160208183030381529060405280519060200120610ac8565b6108395760405162461bcd60e51b815260040161016d90611a3f565b5050505050565b6108486109bc565b600082815260046020526040902054156108745760405162461bcd60e51b815260040161016d90611aa7565b60009182526004602052604090912055565b60008181526004602052604081205490036108b35760405162461bcd60e51b815260040161016d906118a5565b6000818152600460205260409020544210156108e15760405162461bcd60e51b815260040161016d906118f1565b6000846040516020016108f49190611182565b6040516020818303038152906040528051906020012060405160200161091a9190611ae9565b6040516020818303038152906040528051906020012090506109498484848460405160200161080291906119d5565b6108395760405162461bcd60e51b815260040161016d90611b51565b61096d6109bc565b6001600160a01b0381166109b05760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161016d9190610d0a565b6109b981610a60565b50565b6000546001600160a01b0316331461056857336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161016d9190610d0a565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff169160019190610a358385611b61565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082610ad6868685610ae0565b1495945050505050565b600081815b84811015610b2357610b0f82878784818110610b0357610b03611b85565b90506020020135610b2c565b915080610b1b81611b9b565b915050610ae5565b50949350505050565b6000818310610b48576000828152602084905260409020610b57565b60008381526020839052604090205b90505b92915050565b60006001600160a01b038216610b5a565b610b7a81610b60565b82525050565b80610b7a565b60408101610b948285610b71565b6103ad6020830184610b80565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610b5a81610ba1565b600060c08284031215610bfa57610bfa600080fd5b50919050565b600060208284031215610c1557610c15600080fd5b813567ffffffffffffffff811115610c2f57610c2f600080fd5b61044584828501610be5565b60208101610b5a8284610b80565b805b81146109b957600080fd5b8035610b5a81610c49565b600060208284031215610c7657610c76600080fd5b60006104458484610c56565b801515610b7a565b60208101610b5a8284610c82565b610c4b81610b60565b8035610b5a81610c98565b60008060408385031215610cc257610cc2600080fd5b6000610cce8585610ca1565b9250506020610cdf85828601610c56565b9150509250929050565b600060208284031215610cfe57610cfe600080fd5b60006104458484610ca1565b60208101610b5a8284610b71565b60008060408385031215610d2e57610d2e600080fd5b823567ffffffffffffffff811115610d4857610d48600080fd5b610cce85828601610be5565b63ffffffff8116610c4b565b8035610b5a81610d54565b60008083601f840112610d8057610d80600080fd5b50813567ffffffffffffffff811115610d9b57610d9b600080fd5b602083019150836001820283011115610db657610db6600080fd5b9250929050565b60ff8116610c4b565b8035610b5a81610dbd565b600080600080600060808688031215610dec57610dec600080fd5b6000610df88888610d60565b9550506020610e0988828901610d60565b945050604086013567ffffffffffffffff811115610e2957610e29600080fd5b610e3588828901610d6b565b93509350506060610e4888828901610dc6565b9150509295509295909350565b67ffffffffffffffff8116610b7a565b60208101610b5a8284610e55565b600060808284031215610bfa57610bfa600080fd5b60008083601f840112610e9d57610e9d600080fd5b50813567ffffffffffffffff811115610eb857610eb8600080fd5b602083019150836020820283011115610db657610db6600080fd5b60008060008060c08587031215610eec57610eec600080fd5b6000610ef88787610e73565b945050608085013567ffffffffffffffff811115610f1857610f18600080fd5b610f2487828801610e88565b935093505060a0610f3787828801610c56565b91505092959194509250565b60008060408385031215610f5957610f59600080fd5b6000610cce8585610c56565b60008060008060608587031215610f7e57610f7e600080fd5b843567ffffffffffffffff811115610f9857610f98600080fd5b610fa487828801610be5565b945050602085013567ffffffffffffffff811115610fc457610fc4600080fd5b610fd087828801610e88565b93509350506040610f3787828801610c56565b506000610b5a6020830183610ca1565b67ffffffffffffffff8116610c4b565b8035610b5a81610ff3565b506000610b5a6020830183611003565b506000610b5a6020830183610d60565b63ffffffff8116610b7a565b6000808335601e193685900301811261105557611055600080fd5b830160208101925035905067ffffffffffffffff81111561107857611078600080fd5b36819003821315610db657610db6600080fd5b82818337506000910152565b8183526020830192506110ab82848361108b565b50601f01601f19160190565b506000610b5a6020830183610dc6565b60ff8116610b7a565b600060c083016110e08380610fe3565b6110ea8582610b71565b506110f8602084018461100e565b6111056020860182610e55565b50611113604084018461101e565b611120604086018261102e565b5061112e606084018461101e565b61113b606086018261102e565b50611149608084018461103a565b858303608087015261115c838284611097565b9250505061116d60a08401846110b7565b61117a60a08601826110c7565b509392505050565b60208082528101610b5781846110d0565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b60208082528101610b5a81611193565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050610bcf565b60208082528101610b5a816111e1565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506111cb565b60208082528101610b5a81611223565b604081016112998285610b80565b6103ad6020830184610e55565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610bcf565b60208082528101610b5a816112a6565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b5a57610b5a6112e8565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506111cb565b60208082528101610b5a81611311565b60006020828403121561138e5761138e600080fd5b60006104458484610d60565b60008135610b5a81610c98565b60006001600160a01b03835b81169019929092169190911792915050565b6000610b5a6001600160a01b0383166113dc565b90565b6001600160a01b031690565b6000610b5a826113c5565b6000610b5a826113e8565b611407826113f3565b6114128183546113a7565b8255505050565b60008135610b5a81610ff3565b60007bffffffffffffffff00000000000000000000000000000000000000006113b38460a01b90565b600067ffffffffffffffff8216610b5a565b61146a8261144f565b611412818354611426565b60008135610b5a81610d54565b60007fffffffff000000000000000000000000000000000000000000000000000000006113b38460e01b90565b600063ffffffff8216610b5a565b6114c6826114af565b611412818354611482565b600063ffffffff836113b3565b6114e7826114af565b6114128183546114d1565b6000808335601e193685900301811261150d5761150d600080fd5b8301915050803567ffffffffffffffff81111561152c5761152c600080fd5b602082019150600181023603821315610db657610db6600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061158757607f821691505b602082108103610bfa57610bfa61155d565b6000610b5a6113d98381565b6115ae83611599565b815460001960089490940293841b1916921b91909117905550565b60006106e18184846115a5565b81811015610552576115e96000826115c9565b6001016115d6565b601f8211156106e1576000818152602090206020601f850104810160208510156116185750805b6108396020601f8601048301826115d6565b8267ffffffffffffffff81111561164357611643611547565b61164d8254611573565b6116588282856115f1565b506000601f82116001811461168d57600083156116755750848201355b600019600885021c198116600285021785555061065e565b600084815260209020601f19841690835b828110156116be578785013582556020948501946001909201910161169e565b50848210156116db57600019601f86166008021c19848801351681555b5050505060020260010190555050565b6106e183838361162a565b60008135610b5a81610dbd565b600060ff836113b3565b600060ff8216610b5a565b6117218261170d565b611412818354611703565b8082806117388161139a565b905061174481846113fe565b5050602083018061175482611419565b90506117608184611461565b5050604083018061177082611475565b905061177c81846114bd565b50505060018101606083018061179182611475565b905061179d81846114de565b50505060028101608083016117b281856114f2565b91506117bf8282856116eb565b5050506003810160a08301806117d4826116f6565b90506108398184611718565b610552828261172c565b60c081016117f8828a610b71565b6118056020830189610e55565b611812604083018861102e565b61181f606083018761102e565b8181036080830152611832818587611097565b905061184160a08301846110c7565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506111cb565b60208082528101610b5a8161184d565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506111cb565b60208082528101610b5a816118b5565b506000610b5a6020830183610c56565b61191b8180610fe3565b6119258382610b71565b506119336020820182610fe3565b6119406020840182610b71565b5061194e6040820182611901565b61195b6040840182610b80565b50611969606082018261100e565b6106e16060840182610e55565b60808101610b5a8284611911565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050610bcf565b604080825281016119c681611984565b9050610b5a6020830184610b80565b6119df8183610b80565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506111cb565b60208082528101610b5a816119e7565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506111cb565b60208082528101610b5a81611a4f565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050610bcf565b604080825281016119c681611ab7565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506111cb565b60208082528101610b5a81611af9565b67ffffffffffffffff918216919081169082820190811115610b5a57610b5a6112e8565b634e487b7160e01b600052603260045260246000fd5b600060018201611bad57611bad6112e8565b506001019056fea2646970667358221220c8293ff525ddcfd01a52b0bf26c4071757f9277603389aebc8011c7267aa4e7064736f6c63430008140033", } // MerkleTreeMessageBusABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/MessageBus/MessageBus.go b/contracts/generated/MessageBus/MessageBus.go index ff1956c2da..a3bdc7b4f2 100644 --- a/contracts/generated/MessageBus/MessageBus.go +++ b/contracts/generated/MessageBus/MessageBus.go @@ -42,7 +42,7 @@ type StructsCrossChainMessage struct { // MessageBusMetaData contains all meta data concerning the MessageBus contract. var MessageBusMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"LogMessagePublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"name\":\"ValueTransfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"getMessageTimeOfFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"publishMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveValueFromL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"retrieveAllFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendValueToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"finalAfterTimestamp\",\"type\":\"uint256\"}],\"name\":\"storeCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"verifyMessageFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6080604052346200002657620000146200002b565b604051611344620001bb823961134490f35b600080fd5b620000363362000083565b565b6200004b62000048620000489290565b90565b6001600160a01b031690565b620000489062000038565b6200006d906200004b565b9052565b60208101929162000036919062000062565b6200008f600062000057565b6200009a816200004b565b620000a5836200004b565b14620000b75750620000369062000158565b620000dd90620000c660405190565b631e4fbdf760e01b81529182916004830162000071565b0390fd5b62000048906200004b565b620000489054620000e1565b62000048906200004b906001600160a01b031682565b6200004890620000f8565b62000048906200010e565b906200013862000048620001549262000119565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b620001646000620000ec565b906200017281600062000124565b620001a9620001a27f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000119565b9162000119565b91620001b460405190565b600090a356fe6080604052600436101561001d575b3661122e5761001b61129c565b005b60003560e01c80630fcfbd11146100bd57806333a88c72146100b8578063346633fb146100b357806336d2da90146100ae578063715018a6146100a95780638da5cb5b146100a45780639730886d1461009f57806399a3ad211461009a578063b1454caa146100955763f2fde38b0361000e576103b0565b610376565b6102aa565b610291565b610225565b61020d565b6101ea565b6101bd565b61012f565b610100565b908160c09103126100d05790565b600080fd5b906020828203126100d057813567ffffffffffffffff81116100d0576100fb92016100c2565b90565b565b346100d05761012b61011b6101163660046100d5565b610c46565b6040519182918290815260200190565b0390f35b346100d05761012b61014a6101453660046100d5565b610b5b565b60405191829182901515815260200190565b6001600160a01b031690565b6001600160a01b0381165b036100d057565b905035906100fe82610168565b80610173565b905035906100fe82610187565b91906040838203126100d0576100fb906101b4818561017a565b9360200161018d565b6101d16101cb36600461019a565b90610653565b604051005b906020828203126100d0576100fb9161017a565b346100d0576101d16101fd3660046101d6565b611225565b60009103126100d057565b346100d05761021d366004610202565b6101d1610400565b346100d057610235366004610202565b61012b61024a6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b91906040838203126100d05782359067ffffffffffffffff82116100d0576101b4816100fb9386016100c2565b346100d0576101d16102a4366004610264565b906111f5565b346100d0576101d16102bd36600461019a565b906108f5565b63ffffffff8116610173565b905035906100fe826102c3565b909182601f830112156100d05781359167ffffffffffffffff83116100d05760200192600183028401116100d057565b60ff8116610173565b905035906100fe8261030c565b9190916080818403126100d05761033983826102cf565b9261034781602084016102cf565b92604083013567ffffffffffffffff81116100d05761036b836100fb9286016102dc565b939094606001610315565b346100d05761012b61039561038c366004610322565b9392909261099a565b6040519182918267ffffffffffffffff909116815260200190565b346100d0576101d16103c33660046101d6565b6104f1565b6103d0610408565b6100fe6103ee565b61015c6100fb6100fb9290565b6100fb906103d8565b6100fe6103fb60006103e5565b610552565b6100fe6103c8565b60005433906001600160a01b03168190036104205750565b61046a9061042d60405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6100fe9061047a610408565b61048460006103e5565b6001600160a01b0381166001600160a01b038316146104a757506100fe90610552565b61046a906104b460405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6100fe9061046e565b906001600160a01b03905b9181191691161790565b61015c6100fb6100fb926001600160a01b031690565b6100fb9061050f565b6100fb90610525565b906105476100fb61054e9261052e565b82546104fa565b9055565b6000546001600160a01b03169061056a816000610537565b61059d6105977f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361052e565b9161052e565b916105a760405190565b80805b0390a3565b6100fb6100fb6100fb9290565b0190565b156105c757565b60405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e67204574686572000000000000000000000000000000006064820152608490fd5b9081526040810192916100fe916020905b019067ffffffffffffffff169052565b610671349261066260006105af565b841190816106c4575b506105c0565b3361067b81610789565b6106ae6106a87f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b69361052e565b9361052e565b936105aa6106bb60405190565b92839283610632565b905083143861066b565b906106d89061052e565b600052602052604060002090565b6100fb905b67ffffffffffffffff1690565b6100fb90546106e6565b6106eb6100fb6100fb9290565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff9081169116019067ffffffffffffffff821161074657565b61070f565b9067ffffffffffffffff90610505565b6106eb6100fb6100fb9267ffffffffffffffff1690565b906107826100fb61054e9261075b565b825461074b565b906100fe60036107c76107b86107a76107a287856106ce565b6106f8565b956107b26001610702565b936106ce565b916107c2836106f8565b610725565b90610772565b906100fe916107da610408565b6108cf565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761081757604052565b6107df565b906100fe61082960405190565b92836107f5565b67ffffffffffffffff811161081757602090601f01601f19160190565b9061085f61085a83610830565b61081c565b918252565b3d1561087e576108733d61084d565b903d6000602084013e565b606090565b1561088a57565b60405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606490fd5b600080916100fe936108e060405190565b90818003925af16108ef610864565b50610883565b906100fe916107cd565b90826000939282370152565b919061092981610922816105bc9560209181520190565b80956108ff565b601f01601f191690565b97969461098360a095610976610990966109696100fe9b969760208f61064360c082019b60008301906001600160a01b03169052565b63ffffffff1660408d0152565b63ffffffff1660608b0152565b88830360808a015261090b565b94019060ff169052565b929091936109ed906109aa600090565b5033926109b684610789565b9687957fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937976109e460405190565b97889788610933565b0390a190565b506100fb90602081019061017a565b67ffffffffffffffff8116610173565b905035906100fe82610a02565b506100fb906020810190610a12565b506100fb9060208101906102cf565b9035601e1936839003018112156100d057016020813591019167ffffffffffffffff82116100d0573682900383136100d057565b506100fb906020810190610315565b906100fb9060a0610b2b610b2160c08401610aab610a9e88806109f3565b6001600160a01b03168652565b610acc610abb6020890189610a1f565b67ffffffffffffffff166020870152565b610ae9610adc6040890189610a2e565b63ffffffff166040870152565b610b06610af96060890189610a2e565b63ffffffff166060870152565b610b136080880188610a3d565b90868303608088015261090b565b9482810190610a71565b60ff16910152565b60208082526100fb92910190610a80565b906106d8565b6100fb9081565b6100fb9054610b4a565b610bad610bb291610b6a600090565b50610b93610b7760405190565b8092610b87602083019182610b33565b908103825203826107f5565b610ba5610b9e825190565b9160200190565b206001610b44565b610b51565b610bbc60006105af565b81119081610bc8575090565b429150111590565b9190565b15610bdb57565b60405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d697474656460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b610bad610c5591610b6a600090565b6100fb610c6260006105af565b8211610bd4565b906100fe91610c76610408565b611154565b9190820180921161074657565b15610c8f57565b60405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b9060001990610505565b90610d146100fb61054e926105af565b8254610cfa565b356100fb81610168565b356100fb816102c3565b610d426100fb6100fb9263ffffffff1690565b63ffffffff1690565b906106d890610d2f565b634e487b7160e01b600052603260045260246000fd5b8054821015610d8e57610d85600491600052602060002090565b91020190600090565b610d55565b634e487b7160e01b600052600060045260246000fd5b356100fb81610a02565b907bffffffffffffffff00000000000000000000000000000000000000009060a01b610505565b90610dea6100fb61054e9261075b565b8254610db3565b907fffffffff000000000000000000000000000000000000000000000000000000009060e01b610505565b90610e2c6100fb61054e92610d2f565b8254610df1565b9063ffffffff90610505565b90610e4f6100fb61054e92610d2f565b8254610e33565b903590601e1936829003018212156100d0570180359067ffffffffffffffff82116100d057602001913682900383136100d057565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610ec1575b6020831014610ebc57565b610e8b565b91607f1691610eb1565b9160001960089290920291821b911b610505565b9190610ef06100fb61054e936105af565b908354610ecb565b6100fe91600091610edf565b818110610f0f575050565b80610f1d6000600193610ef8565b01610f04565b9190601f8111610f3257505050565b610f446100fe93600052602060002090565b906020601f840181900483019310610f66575b6020601f909101040190610f04565b9091508190610f57565b919067ffffffffffffffff821161081757610f9582610f8f8554610ea1565b85610f23565b600090601f8311600114610fd05761054e929160009183610fc5575b5050600019600883021c1916906002021790565b013590503880610fb1565b601f19831691610fe585600052602060002090565b92815b81811061102257509160029391856001969410611009575b50505002019055565b0135600019601f84166008021c19169055388080611000565b91936020600181928787013581550195019201610fe8565b906100fe9291610f70565b356100fb8161030c565b9060ff90610505565b6110686100fb6100fb9260ff1690565b60ff1690565b9061107e6100fb61054e92611058565b825461104f565b6100fe919061110c9060a0906003906110d1816110aa6110a488610d1b565b82610537565b6110bf6110b960208901610da9565b82610dda565b6110cb60408801610d25565b90610e1c565b6110ea600182016110e460608801610d25565b90610e3f565b611104600282016110fe6080880188610e56565b9161103a565b019201611045565b9061106e565b9190611121576100fe91611085565b610d93565b9081549168010000000000000000831015610817578261114e9160016100fe95018155610d6b565b90611112565b6111f06100fb6111de61116a6100fe9542610c7b565b6111cb61117660405190565b6111888160208101610b878a82610b33565b611193610b9e825190565b20916111c66001936111a8610bad8287610b44565b946111c16000966111bb610bd0896105af565b14610c88565b610b44565b610d04565b6111d86002918601610d1b565b906106ce565b6111ea60608501610d25565b90610d4b565b611126565b906100fe91610c69565b6100fe9061120b610408565b6000806100fe9261121b3061052e565b316108e060405190565b6100fe906111ff565b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f727465640000000000000000000000000000000000000000006044820152606490fd5b6001600160a01b0390911681526040810192916100fe9160200152565b6040513d6000823e3d90fd5b6112a53061052e565b63346633fb34913390803b156100d0576112d5846000946112e06112c860405190565b9788968795869460e01b90565b845260048401611273565b03925af18015611309576112f15750565b6100fe90600061130181836107f5565b810190610202565b61129056fea26469706673582212206e339686bf8ddec6e8525b50d91c52800c1a7850e51220ac93a4baecace3761e64736f6c63430008140033", + Bin: "0x608060405234801561001057600080fd5b50338061003c576000604051631e4fbdf760e01b815260040161003391906100bd565b60405180910390fd5b6100458161004b565b506100cb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100b78161009b565b82525050565b602081016100a882846100ae565b61134d806100da6000396000f3fe6080604052600436106100b55760003560e01c80638da5cb5b1161006957806399a3ad211161004e57806399a3ad211461023b578063b1454caa1461025b578063f2fde38b1461028857610129565b80638da5cb5b146101f55780639730886d1461021b57610129565b8063346633fb1161009a578063346633fb146101ad57806336d2da90146101c0578063715018a6146101e057610129565b80630fcfbd111461014a57806333a88c721461018057610129565b36610129576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906100fa90339083906004016107d8565b6000604051808303818588803b15801561011357600080fd5b505af1158015610127573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161014190610827565b60405180910390fd5b34801561015657600080fd5b5061016a610165366004610852565b6102a8565b604051610177919061088d565b60405180910390f35b34801561018c57600080fd5b506101a061019b366004610852565b610308565b60405161017791906108a3565b6101276101bb3660046108e1565b61035b565b3480156101cc57600080fd5b506101276101db36600461091e565b6103e5565b3480156101ec57600080fd5b50610127610464565b34801561020157600080fd5b506000546001600160a01b0316604051610177919061093f565b34801561022757600080fd5b5061012761023636600461094d565b610478565b34801561024757600080fd5b506101276102563660046108e1565b610574565b34801561026757600080fd5b5061027b610276366004610a06565b6105f4565b6040516101779190610a9a565b34801561029457600080fd5b506101276102a336600461091e565b61064d565b600080826040516020016102bc9190610c47565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806103015760405162461bcd60e51b815260040161014190610cb2565b9392505050565b6000808260405160200161031c9190610c47565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906103535750428111155b949350505050565b60003411801561036a57508034145b6103865760405162461bcd60e51b815260040161014190610d1a565b6000610391336106a4565b9050826001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b634846040516103d8929190610d2a565b60405180910390a3505050565b6103ed610702565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461043a576040519150601f19603f3d011682016040523d82523d6000602084013e61043f565b606091505b50509050806104605760405162461bcd60e51b815260040161014190610d77565b5050565b61046c610702565b6104766000610748565b565b610480610702565b600061048c8242610d9d565b90506000836040516020016104a19190610c47565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150156104e65760405162461bcd60e51b815260040161014190610e08565b60008181526001602090815260408220849055600291906105099087018761091e565b6001600160a01b0316815260208101919091526040016000908120906105356080870160608801610e18565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902085916004020161056c8282611286565b505050505050565b61057c610702565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146105c9576040519150601f19603f3d011682016040523d82523d6000602084013e6105ce565b606091505b50509050806105ef5760405162461bcd60e51b815260040161014190610d77565b505050565b60006105ff336106a4565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef7759373382888888888860405161063c9796959493929190611290565b60405180910390a195945050505050565b610655610702565b6001600160a01b0381166106985760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610141919061093f565b6106a181610748565b50565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff1691600191906106d783856112f3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b6000546001600160a01b0316331461047657336040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610141919061093f565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6107cc816107b0565b82525050565b806107cc565b604081016107e682856107c3565b61030160208301846107d2565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016107bd816107f3565b600060c0828403121561084c5761084c600080fd5b50919050565b60006020828403121561086757610867600080fd5b813567ffffffffffffffff81111561088157610881600080fd5b61035384828501610837565b602081016107bd82846107d2565b8015156107cc565b602081016107bd828461089b565b6108ba816107b0565b81146106a157600080fd5b80356107bd816108b1565b806108ba565b80356107bd816108d0565b600080604083850312156108f7576108f7600080fd5b600061090385856108c5565b9250506020610914858286016108d6565b9150509250929050565b60006020828403121561093357610933600080fd5b600061035384846108c5565b602081016107bd82846107c3565b6000806040838503121561096357610963600080fd5b823567ffffffffffffffff81111561097d5761097d600080fd5b61090385828601610837565b63ffffffff81166108ba565b80356107bd81610989565b60008083601f8401126109b5576109b5600080fd5b50813567ffffffffffffffff8111156109d0576109d0600080fd5b6020830191508360018202830111156109eb576109eb600080fd5b9250929050565b60ff81166108ba565b80356107bd816109f2565b600080600080600060808688031215610a2157610a21600080fd5b6000610a2d8888610995565b9550506020610a3e88828901610995565b945050604086013567ffffffffffffffff811115610a5e57610a5e600080fd5b610a6a888289016109a0565b93509350506060610a7d888289016109fb565b9150509295509295909350565b67ffffffffffffffff81166107cc565b602081016107bd8284610a8a565b5060006107bd60208301836108c5565b67ffffffffffffffff81166108ba565b80356107bd81610ab8565b5060006107bd6020830183610ac8565b5060006107bd6020830183610995565b63ffffffff81166107cc565b6000808335601e1936859003018112610b1a57610b1a600080fd5b830160208101925035905067ffffffffffffffff811115610b3d57610b3d600080fd5b368190038213156109eb576109eb600080fd5b82818337506000910152565b818352602083019250610b70828483610b50565b50601f01601f19160190565b5060006107bd60208301836109fb565b60ff81166107cc565b600060c08301610ba58380610aa8565b610baf85826107c3565b50610bbd6020840184610ad3565b610bca6020860182610a8a565b50610bd86040840184610ae3565b610be56040860182610af3565b50610bf36060840184610ae3565b610c006060860182610af3565b50610c0e6080840184610aff565b8583036080870152610c21838284610b5c565b92505050610c3260a0840184610b7c565b610c3f60a0860182610b8c565b509392505050565b602080825281016103018184610b95565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016107bd81610c58565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050610cac565b602080825281016107bd81610cc2565b60408101610d3882856107d2565b6103016020830184610a8a565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610821565b602080825281016107bd81610d45565b634e487b7160e01b600052601160045260246000fd5b808201808211156107bd576107bd610d87565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050610cac565b602080825281016107bd81610db0565b600060208284031215610e2d57610e2d600080fd5b60006103538484610995565b600081356107bd816108b1565b60006001600160a01b03835b81169019929092169190911792915050565b60006107bd6001600160a01b038316610e7b565b90565b6001600160a01b031690565b60006107bd82610e64565b60006107bd82610e87565b610ea682610e92565b610eb1818354610e46565b8255505050565b600081356107bd81610ab8565b60007bffffffffffffffff0000000000000000000000000000000000000000610e528460a01b90565b600067ffffffffffffffff82166107bd565b610f0982610eee565b610eb1818354610ec5565b600081356107bd81610989565b60007fffffffff00000000000000000000000000000000000000000000000000000000610e528460e01b90565b600063ffffffff82166107bd565b610f6582610f4e565b610eb1818354610f21565b600063ffffffff83610e52565b610f8682610f4e565b610eb1818354610f70565b6000808335601e1936859003018112610fac57610fac600080fd5b8301915050803567ffffffffffffffff811115610fcb57610fcb600080fd5b6020820191506001810236038213156109eb576109eb600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061102657607f821691505b60208210810361084c5761084c610ffc565b60006107bd610e788381565b61104d83611038565b815460001960089490940293841b1916921b91909117905550565b60006105ef818484611044565b8181101561046057611088600082611068565b600101611075565b601f8211156105ef576000818152602090206020601f850104810160208510156110b75750805b6110c96020601f860104830182611075565b5050505050565b8267ffffffffffffffff8111156110e9576110e9610fe6565b6110f38254611012565b6110fe828285611090565b506000601f821160018114611133576000831561111b5750848201355b600019600885021c198116600285021785555061056c565b600084815260209020601f19841690835b828110156111645787850135825560209485019460019092019101611144565b508482101561118157600019601f86166008021c19848801351681555b5050505060020260010190555050565b6105ef8383836110d0565b600081356107bd816109f2565b600060ff83610e52565b600060ff82166107bd565b6111c7826111b3565b610eb18183546111a9565b8082806111de81610e39565b90506111ea8184610e9d565b505060208301806111fa82610eb8565b90506112068184610f00565b5050604083018061121682610f14565b90506112228184610f5c565b50505060018101606083018061123782610f14565b90506112438184610f7d565b50505060028101608083016112588185610f91565b9150611265828285611191565b5050506003810160a083018061127a8261119c565b90506110c981846111be565b61046082826111d2565b60c0810161129e828a6107c3565b6112ab6020830189610a8a565b6112b86040830188610af3565b6112c56060830187610af3565b81810360808301526112d8818587610b5c565b90506112e760a0830184610b8c565b98975050505050505050565b67ffffffffffffffff9182169190811690828201908111156107bd576107bd610d8756fea264697066735822122042ebfb5e754c029c4a229a7ae2e07e276fa0abbea16ed56651f87297125bca7464736f6c63430008140033", } // MessageBusABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ObsERC20/ObsERC20.go b/contracts/generated/ObsERC20/ObsERC20.go index f81fcbbc62..f3aba77ce5 100644 --- a/contracts/generated/ObsERC20/ObsERC20.go +++ b/contracts/generated/ObsERC20/ObsERC20.go @@ -32,7 +32,7 @@ var ( // ObsERC20MetaData contains all meta data concerning the ObsERC20 contract. var ObsERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523462000031576200001f6200001862000175565b9062000209565b604051610b59620004498239610b5990f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160401b0381116200006e57602090601f01601f19160190565b60005b838110620000be5750506000910152565b8181015183820152602001620000ad565b90929192620000e8620000e2826200008d565b62000074565b9381855260208501908284011162000031576200008b92620000aa565b9080601f83011215620000315781516200012292602001620000cf565b90565b919091604081840312620000315780516001600160401b0381116200003157836200015291830162000105565b60208201519093906001600160401b038111620000315762000122920162000105565b6200019862000fa2803803806200018c8162000074565b92833981019062000125565b9091565b906001600160a01b03905b9181191691161790565b6200012290620001c7906001600160a01b031682565b6001600160a01b031690565b6200012290620001b1565b6200012290620001d3565b90620001fd620001226200020592620001de565b82546200019c565b9055565b9062000215916200042e565b6200008b73deb34a740eca1ec42c8b8204cbec0ba34fdd27f36005620001e9565b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156200026f575b60208310146200026957565b62000236565b91607f16916200025d565b9160001960089290920291821b911b620001a7565b6200012262000122620001229290565b9190620002b46200012262000205936200028f565b9083546200027a565b6200008b916000916200029f565b818110620002d7575050565b80620002e76000600193620002bd565b01620002cb565b9190601f8111620002fe57505050565b620003126200008b93600052602060002090565b906020601f84018190048301931062000336575b6020601f909101040190620002cb565b909150819062000326565b906200034b815190565b906001600160401b0382116200006e5762000373826200036c85546200024c565b85620002ee565b602090601f8311600114620003b25762000205929160009183620003a6575b5050600019600883021c1916906002021790565b01519050388062000392565b601f19831691620003c885600052602060002090565b9260005b8181106200040957509160029391856001969410620003ef575b50505002019055565b01516000196008601f8516021c19169055388080620003e6565b91936020600181928787015181550195019201620003cc565b906200008b9162000341565b90620004406200008b92600362000422565b60046200042256fe6080604052600436101561001257600080fd5b60003560e01c806306fdde03146100a2578063095ea7b31461009d57806318160ddd1461009857806323b872dd14610093578063313ce5671461008e57806370a082311461008957806395d89b4114610084578063a9059cbb1461007f5763dd62ed3e036100b257610312565b6102d3565b6102b8565b61029d565b61025a565b61023e565b6101e2565b6101b4565b610126565b60009103126100b257565b600080fd5b60005b8381106100ca5750506000910152565b81810151838201526020016100ba565b6100fb61010460209361010e936100ef815190565b80835293849260200190565b958691016100b7565b601f01601f191690565b0190565b6020808252610123929101906100da565b90565b346100b2576101363660046100a7565b61014d610141610463565b60405191829182610112565b0390f35b6001600160a01b031690565b6001600160a01b0381165b036100b257565b9050359061017c8261015d565b565b80610168565b9050359061017c8261017e565b91906040838203126100b257610123906101ab818561016f565b93602001610184565b346100b25761014d6101d06101ca366004610191565b906104c4565b60405191829182901515815260200190565b346100b2576101f23660046100a7565b61014d6101fd6104a5565b6040515b9182918290815260200190565b90916060828403126100b257610123610227848461016f565b93610235816020860161016f565b93604001610184565b346100b25761014d6101d061025436600461020e565b916104cf565b346100b25761026a3660046100a7565b61014d61027561048a565b6040519182918260ff909116815260200190565b906020828203126100b2576101239161016f565b346100b25761014d6101fd6102b3366004610289565b610990565b346100b2576102c83660046100a7565b61014d61014161046d565b346100b25761014d6101d06102e9366004610191565b906104af565b91906040838203126100b25761012390610309818561016f565b9360200161016f565b346100b25761014d6101fd6103283660046102ef565b90610a29565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610364575b602083101461035f57565b61032e565b91607f1691610354565b8054600093929161038b61038183610344565b8085529360200190565b91600181169081156103dd57506001146103a457505050565b6103b79192939450600052602060002090565b916000925b8184106103c95750500190565b8054848401526020909301926001016103bc565b92949550505060ff1916825215156020020190565b906101239161036e565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761043457604052565b6103fc565b9061017c6104539261044a60405190565b938480926103f2565b0383610412565b61012390610439565b610123600361045a565b610123600461045a565b6104846101236101239290565b60ff1690565b6101236012610477565b6101239081565b6101239054610494565b610123600261049b565b6104bf9190336104f6565b6104f6565b600190565b6104bf9190336107dd565b6104bf9291906104ba83338361090c565b6101516101236101239290565b610123906104e0565b92919061050360006104ed565b936001600160a01b0385166001600160a01b0382161461058f576001600160a01b0385166001600160a01b038316146105415761017c93945061068d565b61058b8561054e60405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b61058b8561059c60405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b610151610123610123926001600160a01b031690565b610123906105d9565b610123906105ef565b9061060b906105f8565b600052602052604060002090565b6001600160a01b03909116815260608101939261017c929091604091610640906020830152565b0152565b6101236101236101239290565b9061012361012361066192610644565b9055565b634e487b7160e01b600052601160045260246000fd5b9190820180921161068857565b610665565b816000610699816104ed565b6001600160a01b0381166001600160a01b03851603610763576106d3906101516106cc886106c7600261049b565b61067b565b6002610651565b6001600160a01b0383160361073e5750506106f96106cc846106f5600261049b565b0390565b61073961072f6107297fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef936105f8565b936105f8565b9361020160405190565b0390a3565b61075e9161074b91610601565b6107588561010e8361049b565b90610651565b6106f9565b9091506107786107738484610601565b61049b565b8581106107a057849291610151610791886106d3940390565b61079b8786610601565b610651565b8361058b876107ae60405190565b9384937fe450d38c00000000000000000000000000000000000000000000000000000000855260048501610619565b909161017c926001925b9091926107f460006104ed565b6001600160a01b0381166001600160a01b038416146108c2576001600160a01b0381166001600160a01b03851614610878575061083f8461079b8561083a866001610601565b610601565b61084857505050565b61073961072f6107297f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925936105f8565b61058b9061088560405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61058b906108cf60405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b9092919261091a8183610a29565b93600019850361092c575b5050509050565b808510610952576109409061094994950390565b906000926107e7565b80388080610925565b9061058b859261096160405190565b9384937ffb8f41b200000000000000000000000000000000000000000000000000000000855260048501610619565b326109ac6001600160a01b0383165b916001600160a01b031690565b14610a0e57336109c46001600160a01b03831661099f565b14610a0e5760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e6365006044820152606490fd5b6101239061077361012391610a21600090565b506000610601565b90326001600160a01b0383168114908115610aed575b50610ac957336001600160a01b0383168114908115610ad2575b50610ac95760405162461bcd60e51b815260206004820152602160248201527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b61012391610b08565b9050610ae66001600160a01b03831661099f565b1438610a59565b9050610b016001600160a01b03831661099f565b1438610a3f565b6101239161083a61077392610b1b600090565b50600161060156fea2646970667358221220690b36c269c48dfa20bda3cc64f66926a337b41752556ff602f3ccc85324b59564736f6c63430008140033", + Bin: "0x6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f31790553480156200003757600080fd5b5060405162000e2738038062000e278339810160408190526200005a91620001b4565b818160036200006a83826200032e565b5060046200007982826200032e565b5050505050620003fa565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620000c257620000c262000084565b6040525050565b6000620000d560405190565b9050620000e382826200009a565b919050565b60006001600160401b0382111562000104576200010462000084565b601f19601f83011660200192915050565b60005b838110156200013257818101518382015260200162000118565b50506000910152565b6000620001526200014c84620000e8565b620000c9565b9050828152602081018484840111156200016f576200016f600080fd5b6200017c84828562000115565b509392505050565b600082601f8301126200019a576200019a600080fd5b8151620001ac8482602086016200013b565b949350505050565b60008060408385031215620001cc57620001cc600080fd5b82516001600160401b03811115620001e757620001e7600080fd5b620001f58582860162000184565b602085015190935090506001600160401b03811115620002185762000218600080fd5b620002268582860162000184565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200025b57607f821691505b60208210810362000270576200027062000230565b50919050565b600062000287620002848381565b90565b92915050565b620002988362000276565b815460001960089490940293841b1916921b91909117905550565b6000620002c28184846200028d565b505050565b81811015620002e657620002dd600082620002b3565b600101620002c7565b5050565b601f821115620002c2576000818152602090206020601f85010481016020851015620003135750805b620003276020601f860104830182620002c7565b5050505050565b81516001600160401b038111156200034a576200034a62000084565b62000356825462000246565b62000363828285620002ea565b506020601f8211600181146200039b5760008315620003825750848201515b600019600885021c198116600285021785555062000327565b600084815260208120601f198516915b82811015620003cd5787850151825560209485019460019092019101620003ab565b5084821015620003eb5783870151600019601f87166008021c191681555b50505050600202600101905550565b610a1d806200040a6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063313ce5671161007657806395d89b411161005b57806395d89b411461012c578063a9059cbb14610134578063dd62ed3e1461014757600080fd5b8063313ce5671461010a57806370a082311461011957600080fd5b806306fdde03146100a8578063095ea7b3146100c657806318160ddd146100e657806323b872dd146100f7575b600080fd5b6100b061015a565b6040516100bd9190610719565b60405180910390f35b6100d96100d4366004610775565b6101ec565b6040516100bd91906107bc565b6002545b6040516100bd91906107d0565b6100d96101053660046107de565b610206565b60126040516100bd9190610837565b6100ea610127366004610845565b61022a565b6100b06102a9565b6100d9610142366004610775565b6102b8565b6100ea61015536600461086e565b6102c6565b606060038054610169906108b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610195906108b7565b80156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b6000336101fa818585610381565b60019150505b92915050565b600033610214858285610393565b61021f8585856103ff565b506001949350505050565b60006001600160a01b038216320361025a576001600160a01b038216600090815260208190526040902054610200565b6001600160a01b0382163303610288576001600160a01b038216600090815260208190526040902054610200565b60405162461bcd60e51b81526004016102a0906108e3565b60405180910390fd5b606060048054610169906108b7565b6000336101fa8185856103ff565b6000326001600160a01b03841614806102e75750326001600160a01b038316145b1561031a576001600160a01b038084166000908152600160209081526040808320938616835292905220545b9050610200565b336001600160a01b03841614806103395750336001600160a01b038316145b15610369576001600160a01b03808416600090815260016020908152604080832093861683529290522054610313565b60405162461bcd60e51b81526004016102a09061091e565b61038e8383836001610490565b505050565b600061039f84846102c6565b905060001981146103f957818110156103ea578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016102a093929190610988565b6103f984848484036000610490565b50505050565b6001600160a01b0383166104425760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016102a091906109b0565b6001600160a01b0382166104855760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102a091906109b0565b61038e838383610595565b6001600160a01b0384166104d35760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016102a091906109b0565b6001600160a01b0383166105165760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016102a091906109b0565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156103f957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161058791906107d0565b60405180910390a350505050565b6001600160a01b0383166105c05780600260008282546105b591906109d4565b909155506106389050565b6001600160a01b03831660009081526020819052604090205481811015610619578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102a093929190610988565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661065457600280548290039055610673565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106b691906107d0565b60405180910390a3505050565b60005b838110156106de5781810151838201526020016106c6565b50506000910152565b60006106f1825190565b8084526020840193506107088185602086016106c3565b601f01601f19169290920192915050565b6020808252810161072a81846106e7565b9392505050565b60006001600160a01b038216610200565b61074b81610731565b811461075657600080fd5b50565b803561020081610742565b8061074b565b803561020081610764565b6000806040838503121561078b5761078b600080fd5b60006107978585610759565b92505060206107a88582860161076a565b9150509250929050565b8015155b82525050565b6020810161020082846107b2565b806107b6565b6020810161020082846107ca565b6000806000606084860312156107f6576107f6600080fd5b60006108028686610759565b935050602061081386828701610759565b92505060406108248682870161076a565b9150509250925092565b60ff81166107b6565b60208101610200828461082e565b60006020828403121561085a5761085a600080fd5b60006108668484610759565b949350505050565b6000806040838503121561088457610884600080fd5b60006108908585610759565b92505060206107a885828601610759565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806108cb57607f821691505b6020821081036108dd576108dd6108a1565b50919050565b6020808252810161020081601f81527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e636500602082015260400190565b6020808252810161020081602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b6107b681610731565b60608101610996828661097f565b6109a360208301856107ca565b61086660408301846107ca565b60208101610200828461097f565b634e487b7160e01b600052601160045260246000fd5b80820180821115610200576102006109be56fea26469706673582212208605d75a03ddd59a97d9c8e27114de8317efd7bea6f2a10b229239dc96ed2d6d64736f6c63430008140033", } // ObsERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ObscuroBridge/ObscuroBridge.go b/contracts/generated/ObscuroBridge/ObscuroBridge.go index 7bdbebb2a6..49e5d5fa84 100644 --- a/contracts/generated/ObscuroBridge/ObscuroBridge.go +++ b/contracts/generated/ObscuroBridge/ObscuroBridge.go @@ -32,7 +32,7 @@ var ( // ObscuroBridgeMetaData contains all meta data concerning the ObscuroBridge contract. var ObscuroBridgeMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_TOKEN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_TOKEN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messengerAddress\",\"type\":\"address\"}],\"name\":\"configure\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messenger\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"promoteToAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"receiveAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"removeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendNative\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"setRemoteBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"whitelistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052346200002657620000146200002b565b604051611c89620000b58239611c8990f35b600080fd5b6200003562000037565b565b62000035620000356200003562000035620000356200003562000035620000a6565b6200006c62000069620000699290565b90565b63ffffffff1690565b906200008962000069620000a29262000059565b82549063ffffffff60a01b9060a01b9181191691161790565b9055565b62000035600060016200007556fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461014257806316ce81491461013d5780631888d71214610138578063248a9ca3146101335780632f2ff15d1461012e57806336568abe14610129578063498d82ab146101245780635d8729701461011f5780635fa7b5841461011a57806375b238fc1461011557806375cb26721461011057806383bece4d1461010b57806391d148541461010657806393b3744214610101578063a217fddf146100fc578063a381c8e2146100f7578063c4d66de8146100f2578063d547741f146100ed5763e4c3ebc70361015a57610521565b610508565b6104f0565b6104d7565b6104bc565b610485565b610469565b610450565b610408565b6103cf565b6103b7565b61037e565b610357565b6102b4565b61029b565b61024d565b610213565b6101f6565b610189565b6001600160e01b031981165b0361015a57565b600080fd5b9050359061016c82610147565b565b9060208282031261015a576101829161015f565b90565b9052565b3461015a576101b66101a461019f36600461016e565b61055a565b60405191829182901515815260200190565b0390f35b6001600160a01b031690565b6001600160a01b038116610153565b9050359061016c826101c6565b9060208282031261015a57610182916101d5565b3461015a5761020e6102093660046101e2565b610e86565b604051005b61020e6102213660046101e2565b610f28565b80610153565b9050359061016c82610226565b9060208282031261015a576101829161022c565b3461015a576101b6610268610263366004610239565b610656565b6040519182918290815260200190565b919060408382031261015a5761018290610292818561022c565b936020016101d5565b3461015a5761020e6102ae366004610278565b90610690565b3461015a5761020e6102c7366004610278565b90610740565b909182601f8301121561015a5781359167ffffffffffffffff831161015a57602001926001830284011161015a57565b60608183031261015a5761031182826101d5565b92602082013567ffffffffffffffff811161015a57836103329184016102cd565b929093604082013567ffffffffffffffff811161015a5761035392016102cd565b9091565b3461015a5761020e61036a3660046102fd565b93929092610db6565b600091031261015a57565b3461015a5761038e366004610373565b6101b67f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a610268565b3461015a5761020e6103ca3660046101e2565b610e1a565b3461015a576103df366004610373565b6101b67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610268565b3461015a5761020e61041b3660046101e2565b6118d6565b909160608284031261015a5761018261043984846101d5565b93610447816020860161022c565b936040016101d5565b3461015a5761020e610463366004610420565b9161174f565b3461015a576101b66101a461047f366004610278565b9061061d565b3461015a5761020e6104983660046101e2565b610bb3565b6101826101826101829290565b610182600061049d565b6101826104aa565b3461015a576104cc366004610373565b6101b66102686104b4565b3461015a5761020e6104ea366004610420565b91611152565b3461015a5761020e6105033660046101e2565b610b4e565b3461015a5761020e61051b366004610278565b90610736565b3461015a57610531366004610373565b6101b67fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad2110578610268565b7f7965db0b000000000000000000000000000000000000000000000000000000006001600160e01b0319821614908115610592575090565b61018291506001600160e01b0319167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101ba610182610182926001600160a01b031690565b610182906105d6565b610182906105ec565b906105c8906105f5565b610182905b60ff1690565b6101829054610608565b61018291600061063a61064093610632600090565b5060026105c6565b016105fe565b610613565b6101829081565b6101829054610645565b600161066761018292610632600090565b0161064c565b9061016c9161068361067e82610656565b61069a565b9061068d916107b7565b50565b9061016c9161066d565b61016c9033906106c2565b6001600160a01b03909116815260408101929161016c9160200152565b906106d46106d0828461061d565b1590565b6106dc575050565b6107176106e860405190565b9283927fe2517d3f000000000000000000000000000000000000000000000000000000008452600484016106a5565b0390fd5b9061016c9161072c61067e82610656565b9061068d91610834565b9061016c9161071b565b9061074a336101ba565b6001600160a01b038216036107625761068d91610834565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b906107ac6101826107b392151590565b825461078d565b9055565b6107c46106d0838361061d565b1561082d576001916107e6836107e183600061063a8760026105c6565b61079c565b339061081c6108166108167f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b926105f5565b9261082660405190565b600090a490565b5050600090565b9061083f818361061d565b1561082d5761085960006107e1838261063a8760026105c6565b33906108896108166108167ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261089360405190565b600090a4600190565b1490565b6101829060401c61060d565b61018290546108a0565b610182905b67ffffffffffffffff1690565b61018290546108b6565b6108bb6101826101829290565b9067ffffffffffffffff90610792565b6108bb6101826101829267ffffffffffffffff1690565b906109166101826107b3926108ef565b82546108df565b9068ff00000000000000009060401b610792565b906109416101826107b392151590565b825461091d565b610185906108d2565b60208101929161016c9190610948565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090819061099a6109946106d0846108ac565b936108c8565b926000916109a7836108d2565b67ffffffffffffffff86161480610ac9575b6001956109d66109c8886108d2565b9167ffffffffffffffff1690565b149081610aa1575b155b9081610a98575b50610a6d57610a109082610a07856109fe896108d2565b97019687610906565b610a5e57610ae6565b610a1957505050565b610a2291610931565b610a597fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d291610a5060405190565b91829182610951565b0390a1565b610a688686610931565b610ae6565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b159050386109e7565b90506109e0610aaf306105f5565b3b610ac0610abc8761049d565b9190565b149190506109de565b50816109b9565b6101ba6101826101829290565b61018290610ad0565b610aef906118d6565b610b19337fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756107b7565b5061068d7fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad2110578610b486000610add565b906107b7565b61016c90610961565b61016c90610b847fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069a565b61068d907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756107b7565b6107b7565b61016c90610b57565b61016c9493929190610bed7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069a565b610d00565b90826000939282370152565b9190610c1c81610c1581610c269560209181520190565b8095610bf2565b601f01601f191690565b0190565b9391906101829593610c5d92610c50606088019360008901906001600160a01b03169052565b8683036020880152610bfe565b926040818503910152610bfe565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff821117610ca357604052565b610c6b565b610182906101ba565b6101829054610ca8565b634e487b7160e01b600052602160045260246000fd5b60031115610cdb57565b610cbb565b9061016c82610cd1565b61018290610ce0565b61060d6101826101829290565b9061016c94600494610d8694610d7793610d3b86610bae7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a90565b507f458ffd630000000000000000000000000000000000000000000000000000000095610d6760405190565b9889976020890190815201610c2a565b60208201810382520382610c81565b610d906003610cb1565b90610d9b6001610cea565b600091610db0610daa8461049d565b93610cf3565b93611b6b565b9061016c94939291610bbc565b61016c90610df07fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069a565b61068d907f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a610834565b61016c90610dc3565b61016c90610e507fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069a565b610e7b565b906001600160a01b0390610792565b90610e746101826107b3926105f5565b8254610e55565b61016c906003610e64565b61016c90610e23565b15610e9657565b60405162461bcd60e51b815260206004820152600f60248201527f456d707479207472616e736665722e00000000000000000000000000000000006044820152606490fd5b9061016c610ee860405190565b9283610c81565b6101826040610edb565b60408101929161016c9190805182526020908101516001600160a01b0316910152565b6040513d6000823e3d90fd5b34600091610f3f610f388461049d565b8311610e8f565b610fb3610f4a610eef565b610f548486830152565b6001600160a01b0383166020820152610f8b610f6f60405190565b8092610f7f602083019182610ef9565b90810382520382610c81565b610f956003610cb1565b90610fa06002610cea565b610fa98761049d565b91610db088610cf3565b610fc3610fbe611958565b6105f5565b9063346633fb91803b1561015a57610ff0848694610ffb610fe360405190565b9788968795869460e01b90565b8452600484016106a5565b03925af180156110335761100d575050565b8161016c92903d1061102c575b6110248183610c81565b810190610373565b503d61101a565b610f1c565b1561103f57565b60405162461bcd60e51b815260206004820152601a60248201527f417474656d7074696e6720656d707479207472616e736665722e0000000000006044820152606490fd5b1561108b57565b60405162461bcd60e51b815260206004820152604e60248201527f54686973206164647265737320686173206e6f74206265656e20676976656e2060448201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60648201527f742077686974656c69737465642e000000000000000000000000000000000000608482015260a490fd5b6001600160a01b03909116815260608101939261016c929091604091611143906020830152565b01906001600160a01b03169052565b9061120f60049261120061016c9560009461117661116f8761049d565b8211611038565b6111a86111a3857f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a61061d565b611084565b6111c5816111b5866105f5565b336111bf306105f5565b9161127a565b7f83bece4d00000000000000000000000000000000000000000000000000000000936111f060405190565b978895602087019081520161111c565b60208201810382520383610c81565b6112196003610cb1565b9161122382610cea565b90610db0610daa8461049d565b6112496112436101829263ffffffff1690565b60e01b90565b6001600160e01b03191690565b6001600160a01b0391821681529116602082015260608101929161016c9160400152565b906112b09061120061016c956004956112966323b872dd611230565b936112a060405190565b9788956020870190815201611256565b6112de565b801515610153565b9050519061016c826112b5565b9060208282031261015a57610182916112bd565b6112ea6112f1916105f5565b918261137f565b8051611300610abc600061049d565b1415908161135b575b506113115750565b6107179061131e60405190565b9182917f5274afe7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b611379915080602061136e6106d0935190565b8183010191016112ca565b38611309565b6101829161138d600061049d565b916113e6565b67ffffffffffffffff8111610ca357602090601f01601f19160190565b906113c26113bd83611393565b610edb565b918252565b3d156113e1576113d63d6113b0565b903d6000602084013e565b606090565b91906113f1306105f5565b8281311061141b575060006101829392826020839401905191855af16114156113c7565b91611465565b6107179061142860405190565b9182917fcd786059000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b9061147057506114f3565b8151600090611481610abc8361049d565b1490816114dc575b50611492575090565b6107179061149f60405190565b9182917f9996b315000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b90506114ec610abc833b9261049d565b1438611489565b8051611502610abc600061049d565b111561151057805190602001fd5b6040517f1425ea42000000000000000000000000000000000000000000000000000000008152600490fd5b1561154257565b60405162461bcd60e51b815260206004820152603060248201527f436f6e74726163742063616c6c6572206973206e6f742074686520726567697360448201527f7465726564206d657373656e67657221000000000000000000000000000000006064820152608490fd5b156115b457565b60405162461bcd60e51b815260206004820152603160248201527f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2060448201527f696e636f72726563742073656e646572210000000000000000000000000000006064820152608490fd5b9061016c92916116706116326003610cb1565b61164261163d611944565b61153b565b61166a61165d611650611962565b926001600160a01b031690565b916001600160a01b031690565b146115ad565b919061169c837f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a61061d565b156116aa5761016c9261175a565b50906116d6907fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057861061d565b156116e45761016c906117e7565b60405162461bcd60e51b815260206004820152602560248201527f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206160448201527f737365742e0000000000000000000000000000000000000000000000000000006064820152608490fd5b9061016c929161161f565b9161176761016c936105f5565b6112b060049261120061016c9561178163a9059cbb611230565b9261178b60405190565b96879460208601908152016106a5565b156117a257565b60405162461bcd60e51b815260206004820152601460248201527f4661696c656420746f2073656e642045746865720000000000000000000000006044820152606490fd5b60008061016c926117f760405190565b60009183905af16118066113c7565b5061179b565b61016c906118186118df565b61183e565b9050519061016c826101c6565b9060208282031261015a576101829161181d565b61184a611851916105f5565b6000610e64565b61187b6020611863610fbe6000610cb1565b63a1a227fa9061187260405190565b93849260e01b90565b825260049082905afa9081156110335761016c916118a1916000916118a8575b506105f5565b6001610e64565b6118c9915060203d81116118cf575b6118c18183610c81565b81019061182a565b3861189b565b503d6118b7565b61016c9061180c565b6118ea6106d061191b565b6118f057565b6040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152600490fd5b6101827ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006108ac565b3361089c61165d6101ba610fbe6000610cb1565b6101826001610cb1565b6119836020611974610fbe6000610cb1565b6363012de59061187260405190565b825260049082905afa9081156110335760009161199e575090565b610182915060203d81116118cf576118c18183610c81565b6101826060610edb565b60005b8381106119d35750506000910152565b81810151838201526020016119c3565b611a04610c1c602093610c26936119f8815190565b80835293849260200190565b958691016119c0565b80516001600160a01b031682529061018290604080611a3b60608401602087015185820360208701526119e3565b940151910152565b602080825261018292910190611a0d565b6101829060a01c5b63ffffffff1690565b6101829054611a54565b634e487b7160e01b600052601160045260246000fd5b63ffffffff1663ffffffff8114611a9c5760010190565b611a6f565b9077ffffffff00000000000000000000000000000000000000009060a01b610792565b611a5c6101826101829263ffffffff1690565b90611ae76101826107b392611ac4565b8254611aa1565b67ffffffffffffffff8116610153565b9050519061016c82611aee565b9060208282031261015a5761018291611afe565b94939160609161016c94611b54611b6193611b4760808b019460008c019063ffffffff169052565b63ffffffff1660208a0152565b87820360408901526119e3565b94019060ff169052565b919390602093611b98611b9f92611b92611b836119b6565b6001600160a01b039097168752565b86860152565b6040840152565b611bc6611bab60405190565b8093611bba8683019182611a43565b90810382520383610c81565b611c106000611bd8610fbe6001610cb1565b92611c1b63b1454caa91611bec6001611a65565b96611c00611bf989611a85565b6001611ad7565b604051998a988997889660e01b90565b865260048601611b1f565b03925af1801561103357611c2c5750565b61068d9060203d8111611c4c575b611c448183610c81565b810190611b0b565b503d611c3a56fea26469706673582212208428f2c7b82515d6464fd19853a19524f7b4a88ce6e1b9b802317c1683f9d4cf64736f6c63430008140033", + Bin: "0x60806040526001805463ffffffff60a01b1916905534801561002057600080fd5b50611b84806100306000396000f3fe6080604052600436106101445760003560e01c806375b238fc116100c0578063a217fddf11610074578063c4d66de811610059578063c4d66de8146103b4578063d547741f146103d4578063e4c3ebc7146103f457600080fd5b8063a217fddf1461037f578063a381c8e21461039457600080fd5b806383bece4d116100a557806383bece4d146102f957806391d148541461031957806393b374421461035f57600080fd5b806375b238fc146102a557806375cb2672146102d957600080fd5b80632f2ff15d11610117578063498d82ab116100fc578063498d82ab146102315780635d872970146102515780635fa7b5841461028557600080fd5b80632f2ff15d146101f157806336568abe1461021157600080fd5b806301ffc9a71461014957806316ce81491461017f5780631888d712146101a1578063248a9ca3146101b4575b600080fd5b34801561015557600080fd5b50610169610164366004611320565b610428565b6040516101769190611353565b60405180910390f35b34801561018b57600080fd5b5061019f61019a366004611386565b610491565b005b61019f6101af366004611386565b6104eb565b3480156101c057600080fd5b506101e46101cf3660046113b8565b60009081526002602052604090206001015490565b60405161017691906113df565b3480156101fd57600080fd5b5061019f61020c3660046113ed565b6105f6565b34801561021d57600080fd5b5061019f61022c3660046113ed565b610621565b34801561023d57600080fd5b5061019f61024c36600461147c565b610672565b34801561025d57600080fd5b506101e47f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561029157600080fd5b5061019f6102a0366004611386565b610737565b3480156102b157600080fd5b506101e47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156102e557600080fd5b5061019f6102f4366004611386565b61078b565b34801561030557600080fd5b5061019f61031436600461150c565b610866565b34801561032557600080fd5b506101696103343660046113ed565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561036b57600080fd5b5061019f61037a366004611386565b610980565b34801561038b57600080fd5b506101e4600081565b3480156103a057600080fd5b5061019f6103af36600461150c565b6109d4565b3480156103c057600080fd5b5061019f6103cf366004611386565b610ac3565b3480156103e057600080fd5b5061019f6103ef3660046113ed565b610c5c565b34801561040057600080fd5b506101e47fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061048b57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756104bb81610c81565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600034116105145760405162461bcd60e51b815260040161050b90611590565b60405180910390fd5b60006040518060400160405280348152602001836001600160a01b031681525060405160200161054491906115c8565b60408051601f19818403018152919052600354909150610573906001600160a01b03168260025b600080610c8e565b6001546040517f346633fb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063346633fb9034906105c090869083906004016115d6565b6000604051808303818588803b1580156105d957600080fd5b505af11580156105ed573d6000803e3d6000fd5b50505050505050565b60008281526002602052604090206001015461061181610c81565b61061b8383610d9a565b50505050565b6001600160a01b0381163314610663576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066d8282610e48565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561069c81610c81565b6106c67f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87610d9a565b50600063458ffd6360e01b87878787876040516024016106ea95949392919061161d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506105ed906001600160a01b031682600161056b565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561076181610c81565b61066d7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83610e48565b610793610ecf565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fa1a227fa000000000000000000000000000000000000000000000000000000008152905163a1a227fa916004808201926020929091908290030181865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190611669565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6003546000546001600160a01b03918216911633146108975760405162461bcd60e51b815260040161050b906116e4565b806001600160a01b03166108a9610f38565b6001600160a01b0316146108cf5760405162461bcd60e51b815260040161050b9061174c565b6001600160a01b03841660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff161561091f5761091a848484610fb5565b61061b565b6001600160a01b03841660009081527f13ad2d85210d477fe1a6e25654c8250308cf29b050a4bf0b039d70467486712c602052604090205460ff16156109685761091a82610fc0565b60405162461bcd60e51b815260040161050b906117b4565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109aa81610c81565b61066d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610d9a565b600082116109f45760405162461bcd60e51b815260040161050b906117f6565b6001600160a01b03831660009081527f32ef73018533fa188e9e42b313c0a4048c6052342b662fb7510c0d1abcea3413602052604090205460ff16610a4b5760405162461bcd60e51b815260040161050b90611806565b610a5783333085611032565b60006383bece4d60e01b848484604051602401610a769392919061188d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915260035490915061061b906001600160a01b031682600061056b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610b0e5750825b905060008267ffffffffffffffff166001148015610b2b5750303b155b905081158015610b39575080155b15610b70576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ba457845468ff00000000000000001916680100000000000000001785555b610bad8661078b565b610bd77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610d9a565b50610c037fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105786000610d9a565b508315610c5457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610c4b906001906118d0565b60405180910390a15b505050505050565b600082815260026020526040902060010154610c7781610c81565b61061b8383610e48565b610c8b813361108c565b50565b60006040518060600160405280876001600160a01b0316815260200186815260200184815250604051602001610cc4919061197d565b60408051808303601f19018152919052600180549192506001600160a01b0382169163b1454caa917401000000000000000000000000000000000000000090910463ffffffff16906014610d17836119bd565b91906101000a81548163ffffffff021916908363ffffffff1602179055508684866040518563ffffffff1660e01b8152600401610d5794939291906119f5565b6020604051808303816000875af1158015610d76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ed9190611a55565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff16610e405760008381526002602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610df83390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161048b565b50600061048b565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1615610e405760008381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161048b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f36576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a90046001600160a01b03166001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb09190611669565b905090565b61066d8382846110ec565b6040516000906001600160a01b038316908281818181865af19150503d8060008114611008576040519150601f19603f3d011682016040523d82523d6000602084013e61100d565b606091505b505090508061102e5760405162461bcd60e51b815260040161050b90611aa8565b5050565b61061b84856001600160a01b03166323b872dd86868660405160240161105a93929190611ab8565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611112565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff1661102e5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161050b9291906115d6565b61066d83846001600160a01b031663a9059cbb858560405160240161105a9291906115d6565b60006111276001600160a01b03841683611185565b9050805160001415801561114c57508080602001905181019061114a9190611af3565b155b1561066d57826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161050b9190611b14565b60606111938383600061119a565b9392505050565b6060814710156111d857306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161050b9190611b14565b600080856001600160a01b031684866040516111f49190611b44565b60006040518083038185875af1925050503d8060008114611231576040519150601f19603f3d011682016040523d82523d6000602084013e611236565b606091505b5091509150611246868383611250565b9695505050505050565b60608261126557611260826112bc565b611193565b815115801561127c57506001600160a01b0384163b155b156112b557836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161050b9190611b14565b5080611193565b8051156112cc5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981165b8114610c8b57600080fd5b803561048b816112fe565b60006020828403121561133557611335600080fd5b60006113418484611315565b949350505050565b8015155b82525050565b6020810161048b8284611349565b60006001600160a01b03821661048b565b61130a81611361565b803561048b81611372565b60006020828403121561139b5761139b600080fd5b6000611341848461137b565b8061130a565b803561048b816113a7565b6000602082840312156113cd576113cd600080fd5b600061134184846113ad565b8061134d565b6020810161048b82846113d9565b6000806040838503121561140357611403600080fd5b600061140f85856113ad565b92505060206114208582860161137b565b9150509250929050565b60008083601f84011261143f5761143f600080fd5b50813567ffffffffffffffff81111561145a5761145a600080fd5b60208301915083600182028301111561147557611475600080fd5b9250929050565b60008060008060006060868803121561149757611497600080fd5b60006114a3888861137b565b955050602086013567ffffffffffffffff8111156114c3576114c3600080fd5b6114cf8882890161142a565b9450945050604086013567ffffffffffffffff8111156114f1576114f1600080fd5b6114fd8882890161142a565b92509250509295509295909350565b60008060006060848603121561152457611524600080fd5b6000611530868661137b565b9350506020611541868287016113ad565b92505060406115528682870161137b565b9150509250925092565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290505b60200190565b6020808252810161048b8161155c565b61134d81611361565b80516115b583826113d9565b50602081015161066d60208401826115a0565b6040810161048b82846115a9565b604081016115e482856115a0565b61119360208301846113d9565b82818337506000910152565b8183526020830192506116118284836115f1565b50601f01601f19160190565b6060810161162b82886115a0565b818103602083015261163e8186886115fd565b905081810360408301526116538184866115fd565b979650505050505050565b805161048b81611372565b60006020828403121561167e5761167e600080fd5b6000611341848461165e565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290505b60400190565b6020808252810161048b8161168a565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506116de565b6020808252810161048b816116f4565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e000000000000000000000000000000000000000000000000000000602082015290506116de565b6020808252810161048b8161175c565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e0000000000008152905061158a565b6020808252810161048b816117c4565b6020808252810161048b81604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b6060810161189b82866115a0565b6118a860208301856113d9565b61134160408301846115a0565b600067ffffffffffffffff821661048b565b61134d816118b5565b6020810161048b82846118c7565b60005b838110156118f95781810151838201526020016118e1565b50506000910152565b600061190c825190565b8084526020840193506119238185602086016118de565b601f01601f19169290920192915050565b8051600090606084019061194885826115a0565b50602083015184820360208601526119608282611902565b915050604083015161197560408601826113d9565b509392505050565b602080825281016111938184611934565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff16600063fffffffe1982016119d9576119d961198e565b5060010190565b63ffffffff811661134d565b60ff811661134d565b60808101611a0382876119e0565b611a1060208301866119e0565b8181036040830152611a228185611902565b9050611a3160608301846119ec565b95945050505050565b67ffffffffffffffff811661130a565b805161048b81611a3a565b600060208284031215611a6a57611a6a600080fd5b60006113418484611a4a565b60148152602081017f4661696c656420746f2073656e642045746865720000000000000000000000008152905061158a565b6020808252810161048b81611a76565b60608101611ac682866115a0565b611ad360208301856115a0565b61134160408301846113d9565b80151561130a565b805161048b81611ae0565b600060208284031215611b0857611b08600080fd5b60006113418484611ae8565b6020810161048b82846115a0565b6000611b2c825190565b611b3a8185602086016118de565b9290920192915050565b61048b8183611b2256fea2646970667358221220c0d6e7e9bdac6ee621cf30669202695a724feb35cde67924ae717a6ca45ff57b64736f6c63430008140033", } // ObscuroBridgeABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ProxyAdmin/ProxyAdmin.go b/contracts/generated/ProxyAdmin/ProxyAdmin.go index ca98f6cb83..036cc9703c 100644 --- a/contracts/generated/ProxyAdmin/ProxyAdmin.go +++ b/contracts/generated/ProxyAdmin/ProxyAdmin.go @@ -32,7 +32,7 @@ var ( // ProxyAdminMetaData contains all meta data concerning the ProxyAdmin contract. var ProxyAdminMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x60806040523462000030576200001e62000018620000d3565b620000f6565b60405161066362000265823961066390f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003057565b905051906200008a826200009b565b9060208282031262000030576200009891620000ad565b62000098620008c880380380620000ea8162000073565b928339810190620000bc565b6200008a906200012f565b6200008c62000098620000989290565b620000989062000101565b6001600160a01b03909116815260200190565b6200013b600062000111565b6001600160a01b0381166001600160a01b038316146200016157506200008a9062000202565b62000187906200017060405190565b631e4fbdf760e01b8152918291600483016200011c565b0390fd5b62000098906200008c565b6200009890546200018b565b62000098906200008c906001600160a01b031682565b6200009890620001a2565b6200009890620001b8565b90620001e262000098620001fe92620001c3565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200020e600062000196565b906200021c816000620001ce565b620002536200024c7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620001c3565b91620001c3565b916200025e60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063715018a6146100625780638da5cb5b1461005d5780639623609d14610058578063ad3cb1cc146100535763f2fde38b036100725761035a565b61031f565b610246565b6100a9565b610077565b600091031261007257565b600080fd5b3461007257610087366004610067565b61008f6103aa565b604051005b0390f35b6001600160a01b031690565b90565b565b34610072576100b9366004610067565b6100946100ce6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b6001600160a01b0381165b0361007257565b905035906100a7826100e8565b6001600160a01b0381166100f3565b905035906100a782610107565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761017457604052565b610123565b906100a761018660405190565b9283610152565b67ffffffffffffffff811161017457602090601f01601f19160190565b0190565b90826000939282370152565b909291926101cf6101ca8261018d565b610179565b93818552602085019082840111610072576100a7926101ae565b9080601f83011215610072578160206100a4933591016101ba565b916060838303126100725761021982846100fa565b926102278360208301610116565b92604082013567ffffffffffffffff8111610072576100a492016101e9565b61008f610254366004610204565b91610622565b906102676101ca8361018d565b918252565b610276600561025a565b7f352e302e30000000000000000000000000000000000000000000000000000000602082015290565b6100a461026c565b6100a461029f565b6100a46102a7565b60005b8381106102ca5750506000910152565b81810151838201526020016102ba565b6102fb6103046020936101aa936102ef815190565b80835293849260200190565b958691016102b7565b601f01601f191690565b60208082526100a4929101906102da565b346100725761032f366004610067565b61009461033a6102af565b6040519182918261030e565b90602082820312610072576100a491610116565b346100725761008f61036d366004610346565b61049b565b61037a6103b2565b6100a7610398565b6100986100a46100a49290565b6100a490610382565b6100a76103a5600061038f565b610514565b6100a7610372565b60005433906001600160a01b03168190036103ca5750565b610414906103d760405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6100a7906104246103b2565b61042e600061038f565b6001600160a01b0381166001600160a01b0383161461045157506100a790610514565b6104149061045e60405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6100a790610418565b6100986100a46100a4926001600160a01b031690565b6100a4906104a4565b6100a4906104ba565b906104dc6100a4610510926104c3565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000546001600160a01b03169061052c8160006104cc565b61055f6105597f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104c3565b916104c3565b9161056960405190565b600090a3565b906100a7929161057d6103b2565b6105b1565b6001600160a01b0390911681526100a491604082019160208184039101526102da565b6040513d6000823e3d90fd5b6105ba906104c3565b349190634f1ef286813b15610072576000936105e9916105f46105dc60405190565b9788968795869460e01b90565b845260048401610582565b03925af1801561061d576106055750565b6100a79060006106158183610152565b810190610067565b6105a5565b906100a7929161056f56fea26469706673582212205d5f75a536a5fd2f2e441550c1d5a4e715b6cff79e1cc29a86c7abd4b441f65364736f6c63430008140033", + Bin: "0x608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033", } // ProxyAdminABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/SafeERC20/SafeERC20.go b/contracts/generated/SafeERC20/SafeERC20.go index dd38a1cdd7..19355a4f9d 100644 --- a/contracts/generated/SafeERC20/SafeERC20.go +++ b/contracts/generated/SafeERC20/SafeERC20.go @@ -32,7 +32,7 @@ var ( // SafeERC20MetaData contains all meta data concerning the SafeERC20 contract. var SafeERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}]", - Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea2646970667358221220097f8f46b6734165f7ab06c6b165324e986c3f7d860255e827475be01d36367764736f6c63430008140033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200834405c28dfefdd147fe97412057aaa8d46ea72cd97cab9a17d38d82e1e2d5c64736f6c63430008140033", } // SafeERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/Strings/Strings.go b/contracts/generated/Strings/Strings.go index 382f48868e..64db271322 100644 --- a/contracts/generated/Strings/Strings.go +++ b/contracts/generated/Strings/Strings.go @@ -32,7 +32,7 @@ var ( // StringsMetaData contains all meta data concerning the Strings contract. var StringsMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"}]", - Bin: "0x608060405234601a57604051603f6020823930815050603f90f35b600080fdfe6080604052600080fdfea2646970667358221220eb502f249f953290e5e964d13eabad190b25cda5f279e8d9897e136ac3fa882764736f6c63430008140033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f166ed4452d36dd4143cb215aa71e152ba4daaeb96f79a92b1d682a72555143b64736f6c63430008140033", } // StringsABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 89f3f8a066..1e7411afd1 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x6080604052346200002e576200001e62000018620000d1565b620000f4565b604051603f620003818239603f90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b038116036200002e57565b90505190620000888262000099565b906020828203126200002e576200009691620000ab565b620000966200285580380380620000e88162000071565b928339810190620000ba565b620000889062000164565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b62000096906200010b565b620000969062000121565b620001536200014d620000969263ffffffff1690565b60e01b90565b6001600160e01b03191690565b0190565b604051610f6581016001600160401b038111828210176200006b57620001918291610f65620018f0843990565b03906000f080156200028d576200020d916200020760049262000201620001bc63485cc95562000137565b620001f13386620001cc60405190565b98899460208601908152016001600160a01b0391821681529116602082015260400190565b6020820181038252038562000049565b6200012c565b62000335565b620002887fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69916200023d60405190565b9182918260408082526014908201527f5472616e73616374696f6e73416e616c797a657200000000000000000000000060608201526001600160a01b03909116602082015260800190565b0390a1565b620000ff565b60005b838110620002a75750506000910152565b818101518382015260200162000296565b620002dd620002e76020936200016093620002d1815190565b80835293849260200190565b9586910162000293565b601f01601f191690565b620003276200009694929362000317606084019560008501906001600160a01b03169052565b6001600160a01b03166020830152565b6040818403910152620002b8565b90604051926115308401916001600160401b038311858410176200006b5784936200036993611530620003c08739620002f1565b03906000f080156200028d5762000096906200012c56fe6080604052600080fdfea26469706673582212206f83aeb0682bc5bc65354d3fe229ff3803d66fed38ec8d9ee0eb3b9865c0862964736f6c6343000814003360a060405262000019620000126200019f565b91620001ff565b6040516105e762000681823960805181603001526105e790f35b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b03811603620000ab57565b600080fd5b90505190620000888262000099565b6001600160401b0381116200006b57602090601f01601f19160190565b60005b838110620000f05750506000910152565b8181015183820152602001620000df565b909291926200011a6200011482620000bf565b62000071565b93818552602085019082840111620000ab576200008892620000dc565b9080601f83011215620000ab578151620000969260200162000101565b91606083830312620000ab576200016c8284620000b0565b926200017c8360208301620000b0565b60408201519093906001600160401b038111620000ab5762000096920162000137565b620001c26200153080380380620001b68162000071565b92833981019062000154565b909192565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b6200009690620001d3565b6200009690620001e9565b916200020c919262000288565b604051906108c882016001600160401b038111838210176200006b5782916200024b916108c862000c6885396001600160a01b03909116815260200190565b03906000f0801562000282576200026290620001f4565b608052620000886200027c6080516001600160a01b031690565b62000406565b620001c7565b906200008891620002a4565b6200009662000096620000969290565b90620002b08262000381565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b620002dc83620001f4565b90620002e760405190565b600090a2805162000301620002fd600062000294565b9190565b111562000316576200031391620005a5565b50565b50506200008862000543565b620000967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc62000294565b9062000361620000966200037d92620001f4565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6000813b62000394620002fd8362000294565b14620003b557906200008891620003ae6200009662000322565b016200034d565b620003e882620003c460405190565b634c9c8ce360e01b8152918291600483016001600160a01b03909116815260200190565b0390fd5b6001600160a01b0391821681529116602082015260400190565b6200008890620004156200049b565b817f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91620004506200044660405190565b92839283620003ec565b0390a1620004d1565b620000967fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610362000294565b62000096906200008a565b62000096905462000484565b620000966000620004af6200009662000459565b016200048f565b6200008a62000096620000969290565b6200009690620004b6565b90600091620004e083620004c6565b926001600160a01b0384166001600160a01b03831614620005105762000088929350620003ae6200009662000459565b620003e8846200051f60405190565b633173bdd160e11b8152918291600483016001600160a01b03909116815260200190565b3462000554620002fd600062000294565b116200055c57565b60405163b398979f60e01b8152600490fd5b906200057e6200011483620000bf565b918252565b3d15620005a057620005953d6200056e565b903d6000602084013e565b606090565b6000806200009693620005b6606090565b50805190602001845af4620005ca62000583565b9190620005d857506200064d565b8151600090620005ec620002fd8362000294565b14908162000632575b50620005ff575090565b620003e8906200060e60405190565b639996b31560e01b8152918291600483016001600160a01b03909116815260200190565b905062000645620002fd833b9262000294565b1438620005f5565b80516200065f620002fd600062000294565b11156200066e57805190602001fd5b604051630a12f52160e11b8152600490fdfe608060405261000c61000e565b005b610016610027565b565b6001600160a01b031690565b90565b336100616100547f0000000000000000000000000000000000000000000000000000000000000000610018565b916001600160a01b031690565b036100e8577f4f1ef286000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060003516146100e0576040517fd2b576ec000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b6100166102ed565b6100f06100f5565b610156565b610024610140565b6100246100246100249290565b6100247f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6100fd565b546001600160a01b031690565b610024600061015061002461010a565b01610133565b60008091368280378136915af43d6000803e15610172573d6000f35b3d6000fd5b9093929384831161018f57841161018f578101920390565b600080fd5b6001600160a01b0381160361018f57565b9050359061001682610194565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761020357604052565b6101b2565b9061001661021560405190565b92836101e1565b67ffffffffffffffff811161020357602090601f01601f19160190565b90826000939282370152565b9092919261025a6102558261021c565b610208565b9381855260208501908284011161018f5761001692610239565b9080601f8301121561018f5781602061002493359101610245565b91909160408184031261018f576102a683826101a5565b92602082013567ffffffffffffffff811161018f576100249201610274565b610018610024610024926001600160a01b031690565b610024906102c5565b610024906102db565b61001661032361031c6103146103103660008161030a60046100fd565b91610177565b9091565b81019061028f565b91906102e4565b9061032d826103ef565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b610357836102e4565b9061036160405190565b600090a2805161037861037460006100fd565b9190565b111561038a57610387916104c7565b50565b5050610016610456565b6001600160a01b03909116815260200190565b906103b76100246103eb926102e4565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000813b6103ff610374836100fd565b1461041a57906100169161041461002461010a565b016103a7565b6100dc8261042760405190565b9182917f4c9c8ce300000000000000000000000000000000000000000000000000000000835260048301610394565b3461046461037460006100fd565b1161046b57565b6040517fb398979f000000000000000000000000000000000000000000000000000000008152600490fd5b906104a36102558361021c565b918252565b3d156104c2576104b73d610496565b903d6000602084013e565b606090565b600080610024936104d6606090565b50805190602001845af46104e86104a8565b91906104f45750610569565b8151600090610505610374836100fd565b149081610552575b50610516575090565b6100dc9061052360405190565b9182917f9996b31500000000000000000000000000000000000000000000000000000000835260048301610394565b9050610562610374833b926100fd565b143861050d565b805161057861037460006100fd565b111561058657805190602001fd5b6040517f1425ea42000000000000000000000000000000000000000000000000000000008152600490fdfea2646970667358221220782f2801dba6b92d163f770087c095f4a3bcf48f3a41dbeafc28edfa481d940f64736f6c6343000814003360806040523462000030576200001e62000018620000d3565b620000f6565b60405161066362000265823961066390f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003057565b905051906200008a826200009b565b9060208282031262000030576200009891620000ad565b62000098620008c880380380620000ea8162000073565b928339810190620000bc565b6200008a906200012f565b6200008c62000098620000989290565b620000989062000101565b6001600160a01b03909116815260200190565b6200013b600062000111565b6001600160a01b0381166001600160a01b038316146200016157506200008a9062000202565b62000187906200017060405190565b631e4fbdf760e01b8152918291600483016200011c565b0390fd5b62000098906200008c565b6200009890546200018b565b62000098906200008c906001600160a01b031682565b6200009890620001a2565b6200009890620001b8565b90620001e262000098620001fe92620001c3565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200020e600062000196565b906200021c816000620001ce565b620002536200024c7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620001c3565b91620001c3565b916200025e60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063715018a6146100625780638da5cb5b1461005d5780639623609d14610058578063ad3cb1cc146100535763f2fde38b036100725761035a565b61031f565b610246565b6100a9565b610077565b600091031261007257565b600080fd5b3461007257610087366004610067565b61008f6103aa565b604051005b0390f35b6001600160a01b031690565b90565b565b34610072576100b9366004610067565b6100946100ce6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b6001600160a01b0381165b0361007257565b905035906100a7826100e8565b6001600160a01b0381166100f3565b905035906100a782610107565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761017457604052565b610123565b906100a761018660405190565b9283610152565b67ffffffffffffffff811161017457602090601f01601f19160190565b0190565b90826000939282370152565b909291926101cf6101ca8261018d565b610179565b93818552602085019082840111610072576100a7926101ae565b9080601f83011215610072578160206100a4933591016101ba565b916060838303126100725761021982846100fa565b926102278360208301610116565b92604082013567ffffffffffffffff8111610072576100a492016101e9565b61008f610254366004610204565b91610622565b906102676101ca8361018d565b918252565b610276600561025a565b7f352e302e30000000000000000000000000000000000000000000000000000000602082015290565b6100a461026c565b6100a461029f565b6100a46102a7565b60005b8381106102ca5750506000910152565b81810151838201526020016102ba565b6102fb6103046020936101aa936102ef815190565b80835293849260200190565b958691016102b7565b601f01601f191690565b60208082526100a4929101906102da565b346100725761032f366004610067565b61009461033a6102af565b6040519182918261030e565b90602082820312610072576100a491610116565b346100725761008f61036d366004610346565b61049b565b61037a6103b2565b6100a7610398565b6100986100a46100a49290565b6100a490610382565b6100a76103a5600061038f565b610514565b6100a7610372565b60005433906001600160a01b03168190036103ca5750565b610414906103d760405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6100a7906104246103b2565b61042e600061038f565b6001600160a01b0381166001600160a01b0383161461045157506100a790610514565b6104149061045e60405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6100a790610418565b6100986100a46100a4926001600160a01b031690565b6100a4906104a4565b6100a4906104ba565b906104dc6100a4610510926104c3565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000546001600160a01b03169061052c8160006104cc565b61055f6105597f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104c3565b916104c3565b9161056960405190565b600090a3565b906100a7929161057d6103b2565b6105b1565b6001600160a01b0390911681526100a491604082019160208184039101526102da565b6040513d6000823e3d90fd5b6105ba906104c3565b349190634f1ef286813b15610072576000936105e9916105f46105dc60405190565b9788968795869460e01b90565b845260048401610582565b03925af1801561061d576106055750565b6100a79060006106158183610152565b810190610067565b6105a5565b906100a7929161056f56fea26469706673582212205d5f75a536a5fd2f2e441550c1d5a4e715b6cff79e1cc29a86c7abd4b441f65364736f6c6343000814003360806040523461001a57604051610f456100208239610f4590f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146100d2578063248a9ca3146100cd5780632f2ff15d146100c857806336568abe146100c3578063485cc955146100be5780634a44e6c1146100b9578063508a50f4146100b45780635f03a661146100af57806391d14854146100aa578063a217fddf146100a5578063d547741f146100a05763ee546fd803610102576103dd565b6103b0565b610395565b61035a565b610321565b6102e8565b6102c4565b610251565b61021e565b610200565b610189565b610131565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361010257565b600080fd5b90503590610114826100d7565b565b906020828203126101025761012a91610107565b90565b9052565b346101025761015e61014c610147366004610116565b6103f5565b60405191829182901515815260200190565b0390f35b806100fb565b9050359061011482610162565b906020828203126101025761012a91610168565b346101025761015e6101a461019f366004610175565b610518565b6040515b9182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166100fb565b90503590610114826101c1565b91906040838203126101025761012a906101f78185610168565b936020016101d0565b34610102576102196102133660046101dd565b9061055a565b604051005b34610102576102196102313660046101dd565b9061060a565b91906040838203126101025761012a906101f781856101d0565b3461010257610219610264366004610237565b906109fb565b909182601f830112156101025781359167ffffffffffffffff831161010257602001926020830284011161010257565b9060208282031261010257813567ffffffffffffffff8111610102576102c0920161026a565b9091565b34610102576102196102d736600461029a565b90610f05565b600091031261010257565b34610102576102f83660046102dd565b61015e7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5986101a4565b34610102576103313660046102dd565b61015e7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db6101a4565b346101025761015e61014c6103703660046101dd565b906104e8565b61012a61012a61012a9290565b61012a6000610376565b61012a610383565b34610102576103a53660046102dd565b61015e6101a461038d565b34610102576102196103c33660046101dd565b90610600565b906020828203126101025761012a916101d0565b34610102576102196103f03660046103c9565b610ac4565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821614908115610445575090565b61012a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101b561012a61012a926001600160a01b031690565b61012a906104a1565b61012a906104b7565b90610493906104c0565b61012a905b60ff1690565b61012a90546104d3565b61012a91610502916104fc60009182610491565b016104c9565b6104de565b61012a9081565b61012a9054610507565b600161053161012a92610529600090565b506000610491565b0161050e565b906101149161054d61054882610518565b610564565b9061055791610681565b50565b9061011491610537565b61011490339061058c565b6001600160a01b0390911681526040810192916101149160200152565b9061059e61059a82846104e8565b1590565b6105a6575050565b6105e16105b260405190565b9283927fe2517d3f0000000000000000000000000000000000000000000000000000000084526004840161056f565b0390fd5b90610114916105f661054882610518565b90610557916106fd565b90610114916105e5565b90610614336101b5565b6001600160a01b0382160361062c57610557916106fd565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061067661012a61067d92151590565b8254610657565b9055565b61068e61059a83836104e8565b156106f6576001916106af836106aa8360006104fc8782610491565b610666565b33906106e56106df6106df7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b926104c0565b926106ef60405190565b600090a490565b5050600090565b9061070881836104e8565b156106f65761072160006106aa83826104fc8782610491565b33906107516106df6106df7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261075b60405190565b600090a4600190565b61012a9060401c6104d8565b61012a9054610764565b61012a905b67ffffffffffffffff1690565b61012a905461077a565b61077f61012a61012a9290565b9067ffffffffffffffff9061065c565b61077f61012a61012a9267ffffffffffffffff1690565b906107da61012a61067d926107b3565b82546107a3565b9068ff00000000000000009060401b61065c565b9061080561012a61067d92151590565b82546107e1565b61012d90610796565b602081019291610114919061080c565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00908161085e61085861059a83610770565b9161078c565b9360009261086b84610796565b67ffffffffffffffff8716148061098d575b60019661089a61088c89610796565b9167ffffffffffffffff1690565b149081610965575b155b908161095c575b50610931576108d491836108cb866108c28a610796565b980197886107ca565b61092257610994565b6108dd57505050565b6108e6916107f5565b61091d7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29161091460405190565b91829182610815565b0390a1565b61092c87876107f5565b610994565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b159050386108ab565b90506108a4610973306104c0565b3b61098461098088610376565b9190565b149190506108a2565b508261087d565b906109d4610557926109ad816109a8610383565b610681565b507ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598610681565b507f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610681565b9061011491610825565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8054821015610a5457610a4b600191600052602060002090565b91020190600090565b610a1b565b9190600861065c910291610a736001600160a01b03841b90565b921b90565b9190610a8961012a61067d936104c0565b908354610a59565b9081549168010000000000000000831015610abf5782610ab991600161011495018155610a31565b90610a78565b610a05565b61011490610ad36001916104c0565b90610a91565b6101149190610b077f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610564565b610d96565b0190565b634e487b7160e01b600052601160045260246000fd5b6000198114610b355760010190565b610b10565b61012a916008021c6101b5565b9061012a9154610b3a565b90601f01601f1916810190811067ffffffffffffffff821117610abf57604052565b60ff81166100fb565b9050359061011482610b74565b5061012a906020810190610b7d565b5061012a906020810190610168565b5061012a9060208101906101d0565b9035601e19368390030181121561010257016020813591019167ffffffffffffffff82116101025736829003831361010257565b90826000939282370152565b9190610c1581610c0e81610b0c9560209181520190565b8095610beb565b601f01601f191690565b9061012a9060e0610ce6610cdc6101008401610c45610c3e8880610b8a565b60ff168652565b610c5c610c556020890189610b99565b6020870152565b610c73610c6c6040890189610b99565b6040870152565b610c8a610c836060890189610b99565b6060870152565b610caa610c9a6080890189610ba8565b6001600160a01b03166080870152565b610cc1610cba60a0890189610b99565b60a0870152565b610cce60c0880188610bb7565b9086830360c0880152610bf7565b9482810190610ba8565b6001600160a01b0316910152565b9061012a91610c1f565b903560fe193683900301811215610102570190565b818352916020019081610d296020830284019490565b92836000925b848410610d3f5750505050505090565b9091929394956020610d6b610d648385600195038852610d5f8b88610cfe565b610cf4565b9860200190565b940194019294939190610d2f565b602080825261012a93910191610d13565b6040513d6000823e3d90fd5b90919060009083610da683610376565b8114610ea657610dda7f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41916101a860405190565b0390a1610de682610376565b6001610df361012a825490565b821015610e9e57610e10610e0a83610e1593610a31565b90610b47565b6104c0565b9063d90d786e91803b1561010257610e3b928591610e3260405190565b94859260e01b90565b8252818381610e4e8c8a60048401610d79565b03925af1918215610e9957610e6892610e6d575b50610b26565b610de6565b610e8c90853d8711610e92575b610e848183610b52565b8101906102dd565b38610e62565b503d610e7a565b610d8a565b505050509050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f207472616e73616374696f6e7320746f20636f6e766572740000000000006044820152606490fd5b9061011491610ad956fea2646970667358221220b67ba19c18a233d92d36e36ee5b48a1bbfdebb7ee33eda44400e9229076b658d64736f6c63430008140033", + Bin: "0x60806040523480156200001157600080fd5b5060405162002468380380620024688339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610de7806200035583390190565b61132c806200113c83390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601481527f5472616e73616374696f6e73416e616c797a6572000000000000000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea264697066735822122089f6b7f86a9a062a63af8f805c4c25fb013c1aa248162cfefbad6aac7da0e47f64736f6c63430008140033608060405234801561001057600080fd5b50610dc7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063508a50f411610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b8063508a50f4146101805780635f03a661146101a757806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a5780634a44e6c11461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b61014561017b366004610a03565b610548565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517fd90d786e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063d90d786e906106679088908890600401610d35565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610d5d565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610d76565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b60006101008301610bca8380610afa565b610bd48582610b0a565b50610be26020840184610b13565b610bef6020860182610919565b50610bfd6040840184610b13565b610c0a6040860182610919565b50610c186060840184610b13565b610c256060860182610919565b50610c336080840184610b23565b610c406080860182610b33565b50610c4e60a0840184610b13565b610c5b60a0860182610919565b50610c6960c0840184610b3c565b85830360c0870152610c7c838284610b99565b92505050610c8d60e0840184610b23565b610c9a60e0860182610b33565b509392505050565b6000610cae8383610bb9565b9392505050565b6000823560fe1936849003018112610ccf57610ccf600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d28578484038952610d068284610cb5565b610d108582610ca2565b94505060208201602099909901989150600101610cef565b5091979650505050505050565b602080825281016108c7818486610cd8565b634e487b7160e01b600052601160045260246000fd5b600060018201610d6f57610d6f610d47565b5060010190565b60408101610d848285610b33565b610cae602083018461091956fea26469706673582212203ccf1914e5a675b9129189d29e25a344ce8257d2099aec64b9ea7fd6bc5914e264736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go b/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go index c33fe8877a..7e11820ff5 100644 --- a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go +++ b/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go @@ -44,7 +44,7 @@ type StructsTransaction struct { // TransactionsAnalyzerMetaData contains all meta data concerning the TransactionsAnalyzer contract. var TransactionsAnalyzerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionsLength\",\"type\":\"uint256\"}],\"name\":\"TransactionsConverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60806040523461001a57604051610f456100208239610f4590f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146100d2578063248a9ca3146100cd5780632f2ff15d146100c857806336568abe146100c3578063485cc955146100be5780634a44e6c1146100b9578063508a50f4146100b45780635f03a661146100af57806391d14854146100aa578063a217fddf146100a5578063d547741f146100a05763ee546fd803610102576103dd565b6103b0565b610395565b61035a565b610321565b6102e8565b6102c4565b610251565b61021e565b610200565b610189565b610131565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361010257565b600080fd5b90503590610114826100d7565b565b906020828203126101025761012a91610107565b90565b9052565b346101025761015e61014c610147366004610116565b6103f5565b60405191829182901515815260200190565b0390f35b806100fb565b9050359061011482610162565b906020828203126101025761012a91610168565b346101025761015e6101a461019f366004610175565b610518565b6040515b9182918290815260200190565b6001600160a01b031690565b6001600160a01b0381166100fb565b90503590610114826101c1565b91906040838203126101025761012a906101f78185610168565b936020016101d0565b34610102576102196102133660046101dd565b9061055a565b604051005b34610102576102196102313660046101dd565b9061060a565b91906040838203126101025761012a906101f781856101d0565b3461010257610219610264366004610237565b906109fb565b909182601f830112156101025781359167ffffffffffffffff831161010257602001926020830284011161010257565b9060208282031261010257813567ffffffffffffffff8111610102576102c0920161026a565b9091565b34610102576102196102d736600461029a565b90610f05565b600091031261010257565b34610102576102f83660046102dd565b61015e7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5986101a4565b34610102576103313660046102dd565b61015e7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db6101a4565b346101025761015e61014c6103703660046101dd565b906104e8565b61012a61012a61012a9290565b61012a6000610376565b61012a610383565b34610102576103a53660046102dd565b61015e6101a461038d565b34610102576102196103c33660046101dd565b90610600565b906020828203126101025761012a916101d0565b34610102576102196103f03660046103c9565b610ac4565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821614908115610445575090565b61012a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b6101b561012a61012a926001600160a01b031690565b61012a906104a1565b61012a906104b7565b90610493906104c0565b61012a905b60ff1690565b61012a90546104d3565b61012a91610502916104fc60009182610491565b016104c9565b6104de565b61012a9081565b61012a9054610507565b600161053161012a92610529600090565b506000610491565b0161050e565b906101149161054d61054882610518565b610564565b9061055791610681565b50565b9061011491610537565b61011490339061058c565b6001600160a01b0390911681526040810192916101149160200152565b9061059e61059a82846104e8565b1590565b6105a6575050565b6105e16105b260405190565b9283927fe2517d3f0000000000000000000000000000000000000000000000000000000084526004840161056f565b0390fd5b90610114916105f661054882610518565b90610557916106fd565b90610114916105e5565b90610614336101b5565b6001600160a01b0382160361062c57610557916106fd565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061067661012a61067d92151590565b8254610657565b9055565b61068e61059a83836104e8565b156106f6576001916106af836106aa8360006104fc8782610491565b610666565b33906106e56106df6106df7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b926104c0565b926106ef60405190565b600090a490565b5050600090565b9061070881836104e8565b156106f65761072160006106aa83826104fc8782610491565b33906107516106df6106df7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b9261075b60405190565b600090a4600190565b61012a9060401c6104d8565b61012a9054610764565b61012a905b67ffffffffffffffff1690565b61012a905461077a565b61077f61012a61012a9290565b9067ffffffffffffffff9061065c565b61077f61012a61012a9267ffffffffffffffff1690565b906107da61012a61067d926107b3565b82546107a3565b9068ff00000000000000009060401b61065c565b9061080561012a61067d92151590565b82546107e1565b61012d90610796565b602081019291610114919061080c565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00908161085e61085861059a83610770565b9161078c565b9360009261086b84610796565b67ffffffffffffffff8716148061098d575b60019661089a61088c89610796565b9167ffffffffffffffff1690565b149081610965575b155b908161095c575b50610931576108d491836108cb866108c28a610796565b980197886107ca565b61092257610994565b6108dd57505050565b6108e6916107f5565b61091d7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29161091460405190565b91829182610815565b0390a1565b61092c87876107f5565b610994565b6040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152600490fd5b159050386108ab565b90506108a4610973306104c0565b3b61098461098088610376565b9190565b149190506108a2565b508261087d565b906109d4610557926109ad816109a8610383565b610681565b507ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598610681565b507f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610681565b9061011491610825565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8054821015610a5457610a4b600191600052602060002090565b91020190600090565b610a1b565b9190600861065c910291610a736001600160a01b03841b90565b921b90565b9190610a8961012a61067d936104c0565b908354610a59565b9081549168010000000000000000831015610abf5782610ab991600161011495018155610a31565b90610a78565b610a05565b61011490610ad36001916104c0565b90610a91565b6101149190610b077f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610564565b610d96565b0190565b634e487b7160e01b600052601160045260246000fd5b6000198114610b355760010190565b610b10565b61012a916008021c6101b5565b9061012a9154610b3a565b90601f01601f1916810190811067ffffffffffffffff821117610abf57604052565b60ff81166100fb565b9050359061011482610b74565b5061012a906020810190610b7d565b5061012a906020810190610168565b5061012a9060208101906101d0565b9035601e19368390030181121561010257016020813591019167ffffffffffffffff82116101025736829003831361010257565b90826000939282370152565b9190610c1581610c0e81610b0c9560209181520190565b8095610beb565b601f01601f191690565b9061012a9060e0610ce6610cdc6101008401610c45610c3e8880610b8a565b60ff168652565b610c5c610c556020890189610b99565b6020870152565b610c73610c6c6040890189610b99565b6040870152565b610c8a610c836060890189610b99565b6060870152565b610caa610c9a6080890189610ba8565b6001600160a01b03166080870152565b610cc1610cba60a0890189610b99565b60a0870152565b610cce60c0880188610bb7565b9086830360c0880152610bf7565b9482810190610ba8565b6001600160a01b0316910152565b9061012a91610c1f565b903560fe193683900301811215610102570190565b818352916020019081610d296020830284019490565b92836000925b848410610d3f5750505050505090565b9091929394956020610d6b610d648385600195038852610d5f8b88610cfe565b610cf4565b9860200190565b940194019294939190610d2f565b602080825261012a93910191610d13565b6040513d6000823e3d90fd5b90919060009083610da683610376565b8114610ea657610dda7f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41916101a860405190565b0390a1610de682610376565b6001610df361012a825490565b821015610e9e57610e10610e0a83610e1593610a31565b90610b47565b6104c0565b9063d90d786e91803b1561010257610e3b928591610e3260405190565b94859260e01b90565b8252818381610e4e8c8a60048401610d79565b03925af1918215610e9957610e6892610e6d575b50610b26565b610de6565b610e8c90853d8711610e92575b610e848183610b52565b8101906102dd565b38610e62565b503d610e7a565b610d8a565b505050509050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f207472616e73616374696f6e7320746f20636f6e766572740000000000006044820152606490fd5b9061011491610ad956fea2646970667358221220b67ba19c18a233d92d36e36ee5b48a1bbfdebb7ee33eda44400e9229076b658d64736f6c63430008140033", + Bin: "0x608060405234801561001057600080fd5b50610dc7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063508a50f411610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b8063508a50f4146101805780635f03a661146101a757806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a5780634a44e6c11461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b61014561017b366004610a03565b610548565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517fd90d786e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063d90d786e906106679088908890600401610d35565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610d5d565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610d76565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b60006101008301610bca8380610afa565b610bd48582610b0a565b50610be26020840184610b13565b610bef6020860182610919565b50610bfd6040840184610b13565b610c0a6040860182610919565b50610c186060840184610b13565b610c256060860182610919565b50610c336080840184610b23565b610c406080860182610b33565b50610c4e60a0840184610b13565b610c5b60a0860182610919565b50610c6960c0840184610b3c565b85830360c0870152610c7c838284610b99565b92505050610c8d60e0840184610b23565b610c9a60e0860182610b33565b509392505050565b6000610cae8383610bb9565b9392505050565b6000823560fe1936849003018112610ccf57610ccf600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d28578484038952610d068284610cb5565b610d108582610ca2565b94505060208201602099909901989150600101610cef565b5091979650505050505050565b602080825281016108c7818486610cd8565b634e487b7160e01b600052601160045260246000fd5b600060018201610d6f57610d6f610d47565b5060010190565b60408101610d848285610b33565b610cae602083018461091956fea26469706673582212203ccf1914e5a675b9129189d29e25a344ce8257d2099aec64b9ea7fd6bc5914e264736f6c63430008140033", } // TransactionsAnalyzerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/TransparentUpgradeableProxy/TransparentUpgradeableProxy.go b/contracts/generated/TransparentUpgradeableProxy/TransparentUpgradeableProxy.go index a6174dc287..99de0f496d 100644 --- a/contracts/generated/TransparentUpgradeableProxy/TransparentUpgradeableProxy.go +++ b/contracts/generated/TransparentUpgradeableProxy/TransparentUpgradeableProxy.go @@ -32,7 +32,7 @@ var ( // TransparentUpgradeableProxyMetaData contains all meta data concerning the TransparentUpgradeableProxy contract. var TransparentUpgradeableProxyMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProxyDeniedAdminAccess\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}]", - Bin: "0x60a060405262000019620000126200019f565b91620001ff565b6040516105e762000681823960805181603001526105e790f35b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006b57604052565b62000033565b90620000886200008060405190565b928362000049565b565b6001600160a01b031690565b90565b6001600160a01b03811603620000ab57565b600080fd5b90505190620000888262000099565b6001600160401b0381116200006b57602090601f01601f19160190565b60005b838110620000f05750506000910152565b8181015183820152602001620000df565b909291926200011a6200011482620000bf565b62000071565b93818552602085019082840111620000ab576200008892620000dc565b9080601f83011215620000ab578151620000969260200162000101565b91606083830312620000ab576200016c8284620000b0565b926200017c8360208301620000b0565b60408201519093906001600160401b038111620000ab5762000096920162000137565b620001c26200153080380380620001b68162000071565b92833981019062000154565b909192565b6040513d6000823e3d90fd5b62000096906200008a906001600160a01b031682565b6200009690620001d3565b6200009690620001e9565b916200020c919262000288565b604051906108c882016001600160401b038111838210176200006b5782916200024b916108c862000c6885396001600160a01b03909116815260200190565b03906000f0801562000282576200026290620001f4565b608052620000886200027c6080516001600160a01b031690565b62000406565b620001c7565b906200008891620002a4565b6200009662000096620000969290565b90620002b08262000381565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b620002dc83620001f4565b90620002e760405190565b600090a2805162000301620002fd600062000294565b9190565b111562000316576200031391620005a5565b50565b50506200008862000543565b620000967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc62000294565b9062000361620000966200037d92620001f4565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6000813b62000394620002fd8362000294565b14620003b557906200008891620003ae6200009662000322565b016200034d565b620003e882620003c460405190565b634c9c8ce360e01b8152918291600483016001600160a01b03909116815260200190565b0390fd5b6001600160a01b0391821681529116602082015260400190565b6200008890620004156200049b565b817f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91620004506200044660405190565b92839283620003ec565b0390a1620004d1565b620000967fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610362000294565b62000096906200008a565b62000096905462000484565b620000966000620004af6200009662000459565b016200048f565b6200008a62000096620000969290565b6200009690620004b6565b90600091620004e083620004c6565b926001600160a01b0384166001600160a01b03831614620005105762000088929350620003ae6200009662000459565b620003e8846200051f60405190565b633173bdd160e11b8152918291600483016001600160a01b03909116815260200190565b3462000554620002fd600062000294565b116200055c57565b60405163b398979f60e01b8152600490fd5b906200057e6200011483620000bf565b918252565b3d15620005a057620005953d6200056e565b903d6000602084013e565b606090565b6000806200009693620005b6606090565b50805190602001845af4620005ca62000583565b9190620005d857506200064d565b8151600090620005ec620002fd8362000294565b14908162000632575b50620005ff575090565b620003e8906200060e60405190565b639996b31560e01b8152918291600483016001600160a01b03909116815260200190565b905062000645620002fd833b9262000294565b1438620005f5565b80516200065f620002fd600062000294565b11156200066e57805190602001fd5b604051630a12f52160e11b8152600490fdfe608060405261000c61000e565b005b610016610027565b565b6001600160a01b031690565b90565b336100616100547f0000000000000000000000000000000000000000000000000000000000000000610018565b916001600160a01b031690565b036100e8577f4f1ef286000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060003516146100e0576040517fd2b576ec000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b6100166102ed565b6100f06100f5565b610156565b610024610140565b6100246100246100249290565b6100247f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6100fd565b546001600160a01b031690565b610024600061015061002461010a565b01610133565b60008091368280378136915af43d6000803e15610172573d6000f35b3d6000fd5b9093929384831161018f57841161018f578101920390565b600080fd5b6001600160a01b0381160361018f57565b9050359061001682610194565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761020357604052565b6101b2565b9061001661021560405190565b92836101e1565b67ffffffffffffffff811161020357602090601f01601f19160190565b90826000939282370152565b9092919261025a6102558261021c565b610208565b9381855260208501908284011161018f5761001692610239565b9080601f8301121561018f5781602061002493359101610245565b91909160408184031261018f576102a683826101a5565b92602082013567ffffffffffffffff811161018f576100249201610274565b610018610024610024926001600160a01b031690565b610024906102c5565b610024906102db565b61001661032361031c6103146103103660008161030a60046100fd565b91610177565b9091565b81019061028f565b91906102e4565b9061032d826103ef565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b610357836102e4565b9061036160405190565b600090a2805161037861037460006100fd565b9190565b111561038a57610387916104c7565b50565b5050610016610456565b6001600160a01b03909116815260200190565b906103b76100246103eb926102e4565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000813b6103ff610374836100fd565b1461041a57906100169161041461002461010a565b016103a7565b6100dc8261042760405190565b9182917f4c9c8ce300000000000000000000000000000000000000000000000000000000835260048301610394565b3461046461037460006100fd565b1161046b57565b6040517fb398979f000000000000000000000000000000000000000000000000000000008152600490fd5b906104a36102558361021c565b918252565b3d156104c2576104b73d610496565b903d6000602084013e565b606090565b600080610024936104d6606090565b50805190602001845af46104e86104a8565b91906104f45750610569565b8151600090610505610374836100fd565b149081610552575b50610516575090565b6100dc9061052360405190565b9182917f9996b31500000000000000000000000000000000000000000000000000000000835260048301610394565b9050610562610374833b926100fd565b143861050d565b805161057861037460006100fd565b111561058657805190602001fd5b6040517f1425ea42000000000000000000000000000000000000000000000000000000008152600490fdfea2646970667358221220782f2801dba6b92d163f770087c095f4a3bcf48f3a41dbeafc28edfa481d940f64736f6c6343000814003360806040523462000030576200001e62000018620000d3565b620000f6565b60405161066362000265823961066390f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003057565b905051906200008a826200009b565b9060208282031262000030576200009891620000ad565b62000098620008c880380380620000ea8162000073565b928339810190620000bc565b6200008a906200012f565b6200008c62000098620000989290565b620000989062000101565b6001600160a01b03909116815260200190565b6200013b600062000111565b6001600160a01b0381166001600160a01b038316146200016157506200008a9062000202565b62000187906200017060405190565b631e4fbdf760e01b8152918291600483016200011c565b0390fd5b62000098906200008c565b6200009890546200018b565b62000098906200008c906001600160a01b031682565b6200009890620001a2565b6200009890620001b8565b90620001e262000098620001fe92620001c3565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b6200020e600062000196565b906200021c816000620001ce565b620002536200024c7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620001c3565b91620001c3565b916200025e60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063715018a6146100625780638da5cb5b1461005d5780639623609d14610058578063ad3cb1cc146100535763f2fde38b036100725761035a565b61031f565b610246565b6100a9565b610077565b600091031261007257565b600080fd5b3461007257610087366004610067565b61008f6103aa565b604051005b0390f35b6001600160a01b031690565b90565b565b34610072576100b9366004610067565b6100946100ce6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b6001600160a01b0381165b0361007257565b905035906100a7826100e8565b6001600160a01b0381166100f3565b905035906100a782610107565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761017457604052565b610123565b906100a761018660405190565b9283610152565b67ffffffffffffffff811161017457602090601f01601f19160190565b0190565b90826000939282370152565b909291926101cf6101ca8261018d565b610179565b93818552602085019082840111610072576100a7926101ae565b9080601f83011215610072578160206100a4933591016101ba565b916060838303126100725761021982846100fa565b926102278360208301610116565b92604082013567ffffffffffffffff8111610072576100a492016101e9565b61008f610254366004610204565b91610622565b906102676101ca8361018d565b918252565b610276600561025a565b7f352e302e30000000000000000000000000000000000000000000000000000000602082015290565b6100a461026c565b6100a461029f565b6100a46102a7565b60005b8381106102ca5750506000910152565b81810151838201526020016102ba565b6102fb6103046020936101aa936102ef815190565b80835293849260200190565b958691016102b7565b601f01601f191690565b60208082526100a4929101906102da565b346100725761032f366004610067565b61009461033a6102af565b6040519182918261030e565b90602082820312610072576100a491610116565b346100725761008f61036d366004610346565b61049b565b61037a6103b2565b6100a7610398565b6100986100a46100a49290565b6100a490610382565b6100a76103a5600061038f565b610514565b6100a7610372565b60005433906001600160a01b03168190036103ca5750565b610414906103d760405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6100a7906104246103b2565b61042e600061038f565b6001600160a01b0381166001600160a01b0383161461045157506100a790610514565b6104149061045e60405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6100a790610418565b6100986100a46100a4926001600160a01b031690565b6100a4906104a4565b6100a4906104ba565b906104dc6100a4610510926104c3565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03919091161790565b9055565b6000546001600160a01b03169061052c8160006104cc565b61055f6105597f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104c3565b916104c3565b9161056960405190565b600090a3565b906100a7929161057d6103b2565b6105b1565b6001600160a01b0390911681526100a491604082019160208184039101526102da565b6040513d6000823e3d90fd5b6105ba906104c3565b349190634f1ef286813b15610072576000936105e9916105f46105dc60405190565b9788968795869460e01b90565b845260048401610582565b03925af1801561061d576106055750565b6100a79060006106158183610152565b810190610067565b6105a5565b906100a7929161056f56fea26469706673582212205d5f75a536a5fd2f2e441550c1d5a4e715b6cff79e1cc29a86c7abd4b441f65364736f6c63430008140033", + Bin: "0x60a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", } // TransparentUpgradeableProxyABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/WrappedERC20/WrappedERC20.go b/contracts/generated/WrappedERC20/WrappedERC20.go index 1ef5ddbc56..32cd0b3f47 100644 --- a/contracts/generated/WrappedERC20/WrappedERC20.go +++ b/contracts/generated/WrappedERC20/WrappedERC20.go @@ -32,7 +32,7 @@ var ( // WrappedERC20MetaData contains all meta data concerning the WrappedERC20 contract. var WrappedERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"giver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issueFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523462000031576200001f6200001862000175565b906200019c565b60405161123262000595823961123290f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160401b0381116200006e57602090601f01601f19160190565b60005b838110620000be5750506000910152565b8181015183820152602001620000ad565b90929192620000e8620000e2826200008d565b62000074565b9381855260208501908284011162000031576200008b92620000aa565b9080601f83011215620000315781516200012292602001620000cf565b90565b919091604081840312620000315780516001600160401b0381116200003157836200015291830162000105565b60208201519093906001600160401b038111620000315762000122920162000105565b62000198620017c7803803806200018c8162000074565b92833981019062000125565b9091565b90620001a891620001d7565b620001d4337fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775620004d5565b50565b6200008b9182918291829162000255565b906001600160a01b03905b9181191691161790565b620001229062000213906001600160a01b031682565b6001600160a01b031690565b6200012290620001fd565b62000122906200021f565b90620002496200012262000251926200022a565b8254620001e8565b9055565b9062000261916200047a565b6200008b73deb34a740eca1ec42c8b8204cbec0ba34fdd27f3600562000235565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620002bb575b6020831014620002b557565b62000282565b91607f1691620002a9565b9160001960089290920291821b911b620001f3565b6200012262000122620001229290565b919062000300620001226200025193620002db565b908354620002c6565b6200008b91600091620002eb565b81811062000323575050565b8062000333600060019362000309565b0162000317565b9190601f81116200034a57505050565b6200035e6200008b93600052602060002090565b906020601f84018190048301931062000382575b6020601f90910104019062000317565b909150819062000372565b9062000397815190565b906001600160401b0382116200006e57620003bf82620003b8855462000298565b856200033a565b602090601f8311600114620003fe5762000251929160009183620003f2575b5050600019600883021c1916906002021790565b015190503880620003de565b601f198316916200041485600052602060002090565b9260005b81811062000455575091600293918560019694106200043b575b50505002019055565b01516000196008601f8516021c1916905538808062000432565b9193602060018192878701518155019501920162000418565b906200008b916200038d565b906200048c6200008b9260036200046e565b60046200046e565b905b600052602052604060002090565b9062000496906200022a565b9060ff90620001f3565b90620004cd620001226200025192151590565b8254620004b0565b620004e9620004e583836200056b565b1590565b1562000564576001916200051883620005128360006200050b87600762000494565b01620004a4565b620004ba565b3390620005526200054b6200054b7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b926200022a565b926200055d60405190565b600090a490565b5050600090565b620001229160006200050b6200058d9362000584600090565b50600762000494565b5460ff169056fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461014257806306fdde031461013d578063095ea7b31461013857806318160ddd146101335780631dd319cb1461012e57806323b872dd14610129578063248a9ca3146101245780632f2ff15d1461011f578063313ce5671461011a57806336568abe1461011557806370a082311461011057806375b238fc1461010b57806391d148541461010657806395d89b4114610101578063979005ad146100fc578063a217fddf146100f7578063a9059cbb146100f2578063d547741f146100ed5763dd62ed3e0361017257610570565b61053d565b610521565b610506565b6104ce565b6104b3565b610497565b61045e565b610443565b610416565b6103e7565b6103ce565b610390565b610360565b610312565b6102e6565b6102ca565b610245565b61019d565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b0361017257565b600080fd5b9050359061018482610147565b565b906020828203126101725761019a91610177565b90565b34610172576101ca6101b86101b3366004610186565b61058c565b60405191829182901515815260200190565b0390f35b600091031261017257565b60005b8381106101ec5750506000910152565b81810151838201526020016101dc565b61021d61022660209361023093610211815190565b80835293849260200190565b958691016101d9565b601f01601f191690565b0190565b602080825261019a929101906101fc565b34610172576102553660046101ce565b6101ca610260610a37565b60405191829182610234565b6001600160a01b031690565b6001600160a01b03811661016b565b9050359061018482610278565b8061016b565b9050359061018482610294565b91906040838203126101725761019a906102c18185610287565b9360200161029a565b34610172576101ca6101b86102e03660046102a7565b90610a81565b34610172576102f63660046101ce565b6101ca610301610a62565b6040515b9182918290815260200190565b346101725761032b6103253660046102a7565b906111b4565b604051005b90916060828403126101725761019a6103498484610287565b936103578160208601610287565b9360400161029a565b34610172576101ca6101b8610376366004610330565b91610a8c565b906020828203126101725761019a9161029a565b34610172576101ca6103016103a636600461037c565b6106b8565b91906040838203126101725761019a906103c5818561029a565b93602001610287565b346101725761032b6103e13660046103ab565b906106f2565b34610172576103f73660046101ce565b6101ca610402610a58565b6040519182918260ff909116815260200190565b346101725761032b6104293660046103ab565b906107a6565b906020828203126101725761019a91610287565b34610172576101ca61030161045936600461042f565b610f05565b346101725761046e3660046101ce565b6101ca7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610301565b34610172576101ca6101b86104ad3660046103ab565b9061067f565b34610172576104c33660046101ce565b6101ca610260610a41565b346101725761032b6104e13660046102a7565b906110d0565b61019a61019a61019a9290565b61019a60006104e7565b61019a6104f4565b34610172576105163660046101ce565b6101ca6103016104fe565b34610172576101ca6101b86105373660046102a7565b90610a6c565b346101725761032b6105503660046103ab565b9061079c565b91906040838203126101725761019a906103c58185610287565b34610172576101ca610301610586366004610556565b90610f9e565b7f7965db0b000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216149081156105dc575090565b61019a91507fffffffff00000000000000000000000000000000000000000000000000000000167f01ffc9a7000000000000000000000000000000000000000000000000000000001490565b905b600052602052604060002090565b61026c61019a61019a926001600160a01b031690565b61019a90610638565b61019a9061064e565b9061062a90610657565b61019a905b60ff1690565b61019a905461066a565b61019a91600061069c6106a293610694600090565b506007610628565b01610660565b610675565b61019a9081565b61019a90546106a7565b60016106c961019a92610694600090565b016106ae565b90610184916106e56106e0826106b8565b6106fc565b906106ef9161081d565b50565b90610184916106cf565b610184903390610728565b6001600160a01b0390911681526040810192916101849160200152565b0152565b9061073a610736828461067f565b1590565b610742575050565b61077d61074e60405190565b9283927fe2517d3f00000000000000000000000000000000000000000000000000000000845260048401610707565b0390fd5b90610184916107926106e0826106b8565b906106ef9161089a565b9061018491610781565b906107b03361026c565b6001600160a01b038216036107c8576106ef9161089a565b6040517f6697b232000000000000000000000000000000000000000000000000000000008152600490fd5b9060ff905b9181191691161790565b9061081261019a61081992151590565b82546107f3565b9055565b61082a610736838361067f565b156108935760019161084c8361084783600061069c876007610628565b610802565b339061088261087c61087c7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9590565b92610657565b9261088c60405190565b600090a490565b5050600090565b906108a5818361067f565b15610893576108bf6000610847838261069c876007610628565b33906108ef61087c61087c7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9590565b926108f960405190565b600090a4600190565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610938575b602083101461093357565b610902565b91607f1691610928565b8054600093929161095f61095583610918565b8085529360200190565b91600181169081156109b1575060011461097857505050565b61098b9192939450600052602060002090565b916000925b81841061099d5750500190565b805484840152602090930192600101610990565b92949550505060ff1916825215156020020190565b9061019a91610942565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff821117610a0857604052565b6109d0565b90610184610a2792610a1e60405190565b938480926109c6565b03836109e6565b61019a90610a0d565b61019a6003610a2e565b61019a6004610a2e565b61066f61019a61019a9290565b61019a6012610a4b565b61019a60026106ae565b610a7c919033610ab3565b610ab3565b600190565b610a7c919033610d52565b610a7c929190610a77833383610e81565b61026c61019a61019a9290565b61019a90610a9d565b929190610ac06000610aaa565b936001600160a01b0385166001600160a01b03821614610b48576001600160a01b0385166001600160a01b03831614610afe57610184939450610c02565b61077d85610b0b60405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61077d85610b5560405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6001600160a01b039091168152606081019392610184929091604091610724906020830152565b90600019906107f8565b90610bd361019a610819926104e7565b8254610bb9565b634e487b7160e01b600052601160045260246000fd5b91908201809211610bfd57565b610bda565b816000610c0e81610aaa565b6001600160a01b0381166001600160a01b03851603610cd857610c489061026c610c4188610c3c60026106ae565b610bf0565b6002610bc3565b6001600160a01b03831603610cb3575050610c6e610c4184610c6a60026106ae565b0390565b610cae610ca4610c9e7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef93610657565b93610657565b9361030560405190565b0390a3565b610cd391610cc091610660565b610ccd85610230836106ae565b90610bc3565b610c6e565b909150610ced610ce88484610660565b6106ae565b858110610d155784929161026c610d0688610c48940390565b610d108786610660565b610bc3565b8361077d87610d2360405190565b9384937fe450d38c00000000000000000000000000000000000000000000000000000000855260048501610b92565b9091610184926001925b909192610d696000610aaa565b6001600160a01b0381166001600160a01b03841614610e37576001600160a01b0381166001600160a01b03851614610ded5750610db484610d1085610daf866001610660565b610660565b610dbd57505050565b610cae610ca4610c9e7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593610657565b61077d90610dfa60405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61077d90610e4460405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b90929192610e8f8183610f9e565b936000198503610ea1575b5050509050565b808510610ec757610eb590610ebe94950390565b90600092610d5c565b80388080610e9a565b9061077d8592610ed660405190565b9384937ffb8f41b200000000000000000000000000000000000000000000000000000000855260048501610b92565b32610f216001600160a01b0383165b916001600160a01b031690565b14610f835733610f396001600160a01b038316610f14565b14610f835760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e6365006044820152606490fd5b61019a90610ce861019a91610f96600090565b506000610660565b90326001600160a01b0383168114908115611062575b5061103e57336001600160a01b0383168114908115611047575b5061103e5760405162461bcd60e51b815260206004820152602160248201527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608490fd5b61019a9161107d565b905061105b6001600160a01b038316610f14565b1438610fce565b90506110766001600160a01b038316610f14565b1438610fb4565b61019a91610daf610ce892611090600090565b506001610660565b61018491906110c67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106fc565b90610184916110da565b9061018491611098565b91906110e66000610aaa565b926001600160a01b0384166001600160a01b0382161461110a576101849293610c02565b61077d84610b0b60405190565b61018491906111457fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106fc565b611196565b1561115157565b60405162461bcd60e51b815260206004820152601560248201527f496e73756666696369656e742062616c616e63652e00000000000000000000006044820152606490fd5b90610184916111af6111a782610f05565b83111561114a565b6111be565b9061018491611117565b91906111ca6000610aaa565b926001600160a01b0384166001600160a01b038216146111ef57926101849293610c02565b61077d84610b556040519056fea264697066735822122079eebf01d093afea82357215e4515e77a037e9fc967cff9adeeffb005ff0d0bd64736f6c63430008140033", + Bin: "0x6080604052600580546001600160a01b03191673deb34a740eca1ec42c8b8204cbec0ba34fdd27f31790553480156200003757600080fd5b5060405162001546380380620015468339810160408190526200005a916200029e565b8181818160036200006c838262000412565b5060046200007b828262000412565b5050505050620000b27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620000bb60201b60201c565b505050620004de565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16620001645760008381526007602090815260408083206001600160a01b03861684529091529020805460ff191660011790556200011b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000168565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620001ac57620001ac6200016e565b6040525050565b6000620001bf60405190565b9050620001cd828262000184565b919050565b60006001600160401b03821115620001ee57620001ee6200016e565b601f19601f83011660200192915050565b60005b838110156200021c57818101518382015260200162000202565b50506000910152565b60006200023c6200023684620001d2565b620001b3565b905082815260208101848484011115620002595762000259600080fd5b62000266848285620001ff565b509392505050565b600082601f830112620002845762000284600080fd5b81516200029684826020860162000225565b949350505050565b60008060408385031215620002b657620002b6600080fd5b82516001600160401b03811115620002d157620002d1600080fd5b620002df858286016200026e565b602085015190935090506001600160401b03811115620003025762000302600080fd5b62000310858286016200026e565b9150509250929050565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200034557607f821691505b6020821081036200035a576200035a6200031a565b50919050565b6000620001686200036e8381565b90565b6200037c8362000360565b815460001960089490940293841b1916921b91909117905550565b6000620003a681848462000371565b505050565b81811015620003ca57620003c160008262000397565b600101620003ab565b5050565b601f821115620003a6576000818152602090206020601f85010481016020851015620003f75750805b6200040b6020601f860104830182620003ab565b5050505050565b81516001600160401b038111156200042e576200042e6200016e565b6200043a825462000330565b62000447828285620003ce565b506020601f8211600181146200047f5760008315620004665750848201515b600019600885021c19811660028502178555506200040b565b600084815260208120601f198516915b82811015620004b157878501518255602094850194600190920191016200048f565b5084821015620004cf5783870151600019601f87166008021c191681555b50505050600202600101905550565b61105880620004ee6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806336568abe116100cd578063979005ad11610081578063a9059cbb11610066578063a9059cbb146102ce578063d547741f146102e1578063dd62ed3e146102f457600080fd5b8063979005ad146102b3578063a217fddf146102c657600080fd5b806375b238fc116100b257806375b238fc1461024b57806391d148541461027257806395d89b41146102ab57600080fd5b806336568abe1461022557806370a082311461023857600080fd5b80631dd319cb11610124578063248a9ca311610109578063248a9ca3146101e05780632f2ff15d14610203578063313ce5671461021657600080fd5b80631dd319cb146101b857806323b872dd146101cd57600080fd5b806301ffc9a71461015657806306fdde031461017f578063095ea7b31461019457806318160ddd146101a7575b600080fd5b610169610164366004610c49565b610307565b6040516101769190610c7c565b60405180910390f35b6101876103a0565b6040516101769190610ce0565b6101696101a2366004610d27565b610432565b6002545b6040516101769190610d6a565b6101cb6101c6366004610d27565b61044a565b005b6101696101db366004610d78565b6104b4565b6101ab6101ee366004610dc8565b60009081526007602052604090206001015490565b6101cb610211366004610de9565b6104da565b60126040516101769190610e25565b6101cb610233366004610de9565b610505565b6101ab610246366004610e33565b610551565b6101ab7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610169610280366004610de9565b60009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101876105c7565b6101cb6102c1366004610d27565b6105d6565b6101ab600081565b6101696102dc366004610d27565b61060a565b6101cb6102ef366004610de9565b610618565b6101ab610302366004610e54565b61063d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061039a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103af90610e8c565b80601f01602080910402602001604051908101604052809291908181526020018280546103db90610e8c565b80156104285780601f106103fd57610100808354040283529160200191610428565b820191906000526020600020905b81548152906001019060200180831161040b57829003601f168201915b5050505050905090565b6000336104408185856106f8565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561047481610705565b8161047e84610551565b10156104a55760405162461bcd60e51b815260040161049c90610eec565b60405180910390fd5b6104af8383610712565b505050565b6000336104c285828561074c565b6104cd8585856107b2565b60019150505b9392505050565b6000828152600760205260409020600101546104f581610705565b6104ff8383610811565b50505050565b6001600160a01b0381163314610547576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104af82826108bf565b60006001600160a01b0382163203610581576001600160a01b03821660009081526020819052604090205461039a565b6001600160a01b03821633036105af576001600160a01b03821660009081526020819052604090205461039a565b60405162461bcd60e51b815260040161049c90610f2e565b6060600480546103af90610e8c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561060081610705565b6104af8383610946565b6000336104408185856107b2565b60008281526007602052604090206001015461063381610705565b6104ff83836108bf565b6000326001600160a01b038416148061065e5750326001600160a01b038316145b15610691576001600160a01b038084166000908152600160209081526040808320938616835292905220545b905061039a565b336001600160a01b03841614806106b05750336001600160a01b038316145b156106e0576001600160a01b0380841660009081526001602090815260408083209386168352929052205461068a565b60405162461bcd60e51b815260040161049c90610f3e565b6104af838383600161097c565b61070f8133610a81565b50565b6001600160a01b03821661073c576000604051634b637e8f60e11b815260040161049c9190610fa8565b61074882600083610ae1565b5050565b6000610758848461063d565b905060001981146104ff57818110156107a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161049c93929190610fb6565b6104ff8484848403600061097c565b6001600160a01b0383166107dc576000604051634b637e8f60e11b815260040161049c9190610fa8565b6001600160a01b03821661080657600060405163ec442f0560e01b815260040161049c9190610fa8565b6104af838383610ae1565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff166108b75760008381526007602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561086f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161039a565b50600061039a565b60008281526007602090815260408083206001600160a01b038516845290915281205460ff16156108b75760008381526007602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161039a565b6001600160a01b03821661097057600060405163ec442f0560e01b815260040161049c9190610fa8565b61074860008383610ae1565b6001600160a01b0384166109bf5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161049c9190610fa8565b6001600160a01b038316610a025760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161049c9190610fa8565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104ff57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a739190610d6a565b60405180910390a350505050565b60008281526007602090815260408083206001600160a01b038516845290915290205460ff166107485780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161049c929190610fde565b6001600160a01b038316610b0c578060026000828254610b01919061100f565b90915550610b849050565b6001600160a01b03831660009081526020819052604090205481811015610b65578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161049c93929190610fb6565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610ba057600280548290039055610bbf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c029190610d6a565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461070f57600080fd5b803561039a81610c0f565b600060208284031215610c5e57610c5e600080fd5b6000610c6a8484610c3e565b949350505050565b8015155b82525050565b6020810161039a8284610c72565b60005b83811015610ca5578181015183820152602001610c8d565b50506000910152565b6000610cb8825190565b808452602084019350610ccf818560208601610c8a565b601f01601f19169290920192915050565b602080825281016104d38184610cae565b60006001600160a01b03821661039a565b610c3381610cf1565b803561039a81610d02565b80610c33565b803561039a81610d16565b60008060408385031215610d3d57610d3d600080fd5b6000610d498585610d0b565b9250506020610d5a85828601610d1c565b9150509250929050565b80610c76565b6020810161039a8284610d64565b600080600060608486031215610d9057610d90600080fd5b6000610d9c8686610d0b565b9350506020610dad86828701610d0b565b9250506040610dbe86828701610d1c565b9150509250925092565b600060208284031215610ddd57610ddd600080fd5b6000610c6a8484610d1c565b60008060408385031215610dff57610dff600080fd5b6000610e0b8585610d1c565b9250506020610d5a85828601610d0b565b60ff8116610c76565b6020810161039a8284610e1c565b600060208284031215610e4857610e48600080fd5b6000610c6a8484610d0b565b60008060408385031215610e6a57610e6a600080fd5b6000610e0b8585610d0b565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610ea057607f821691505b602082108103610eb257610eb2610e76565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161039a81610eb8565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610ee6565b6020808252810161039a81610efc565b6020808252810161039a81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c7681610cf1565b6020810161039a8284610f9f565b60608101610fc48286610f9f565b610fd16020830185610d64565b610c6a6040830184610d64565b60408101610fec8285610f9f565b6104d36020830184610d64565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039a5761039a610ff956fea26469706673582212200ccb938df157c83569bb97b7cac53f726956a8f0a388597c60ae24feb0f05f4964736f6c63430008140033", } // WrappedERC20ABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ZenBase/ZenBase.go b/contracts/generated/ZenBase/ZenBase.go index 36faa5916b..966356b92c 100644 --- a/contracts/generated/ZenBase/ZenBase.go +++ b/contracts/generated/ZenBase/ZenBase.go @@ -44,7 +44,7 @@ type StructsTransaction struct { // ZenBaseMetaData contains all meta data concerning the ZenBase contract. var ZenBaseMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionAnalyzer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"transactionDecoder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523462000031576200001f62000018620000e5565b90620002c0565b604051610f4c6200063d8239610f4c90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160a01b031690565b90565b6001600160a01b038116036200003157565b905051906200008b826200009c565b919060408382031262000031576200009990620000db8185620000ae565b93602001620000ae565b620001086200158980380380620000fc8162000074565b928339810190620000bd565b9091565b6001600160401b0381116200006e57602090601f01601f19160190565b906200013f62000139836200010c565b62000074565b918252565b62000150600362000129565b622d32b760e91b602082015290565b6200009962000144565b62000175600362000129565b622d22a760e91b602082015290565b6200009962000169565b6200008d62000099620000999290565b62000099906200018e565b15620001b157565b60405162461bcd60e51b8152602060048201526024808201527f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164646044820152637265737360e01b6064820152608490fd5b0390fd5b156200020e57565b60405162461bcd60e51b815260206004820152602360248201527f496e76616c6964207472616e73616374696f6e206465636f646572206164647260448201526265737360e81b6064820152608490fd5b906001600160a01b03905b9181191691161790565b62000099906200008d906001600160a01b031682565b620000999062000274565b62000099906200028a565b90620002b462000099620002bc9262000295565b82546200025f565b9055565b90620003386200008b92620002ea33620002d96200015f565b620002e362000184565b9162000340565b620003306200031e620002fe60006200019e565b6200008d6001600160a01b0382166001600160a01b0386161415620001a9565b6001600160a01b038516141562000206565b6006620002a0565b6007620002a0565b916200034c91620005a9565b6200035860006200019e565b6001600160a01b0381166001600160a01b038316146200037e57506200008b90620005da565b62000202906200038d60405190565b631e4fbdf760e01b8152918291600483016001600160a01b03909116815260200190565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620003ea575b6020831014620003e457565b620003b1565b91607f1691620003d8565b9160001960089290920291821b911b6200026a565b6200009962000099620000999290565b91906200042f62000099620002bc936200040a565b908354620003f5565b6200008b916000916200041a565b81811062000452575050565b8062000462600060019362000438565b0162000446565b9190601f81116200047957505050565b6200048d6200008b93600052602060002090565b906020601f840181900483019310620004b1575b6020601f90910104019062000446565b9091508190620004a1565b90620004c6815190565b906001600160401b0382116200006e57620004ee82620004e78554620003c7565b8562000469565b602090601f83116001146200052d57620002bc92916000918362000521575b5050600019600883021c1916906002021790565b0151905038806200050d565b601f198316916200054385600052602060002090565b9260005b81811062000584575091600293918560019694106200056a575b50505002019055565b01516000196008601f8516021c1916905538808062000561565b9193602060018192878701518155019501920162000547565b906200008b91620004bc565b90620005bb6200008b9260036200059d565b60046200059d565b62000099906200008d565b620000999054620005c3565b620005e66005620005ce565b90620005f4816005620002a0565b6200062b620006247f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000295565b9162000295565b916200063660405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806306fdde03146100e2578063095ea7b3146100dd57806318160ddd146100d857806323b872dd146100d3578063313ce567146100ce57806370a08231146100c9578063715018a6146100c45780638da5cb5b146100bf57806395d89b41146100ba578063a9059cbb146100b5578063d90d786e146100b0578063dd62ed3e146100ab5763f2fde38b036100f257610441565b610425565b6103e9565b610373565b610358565b610319565b6102fc565b6102e1565b61029e565b610282565b610226565b6101f8565b610166565b60009103126100f257565b600080fd5b60005b83811061010a5750506000910152565b81810151838201526020016100fa565b61013b61014460209361014e9361012f815190565b80835293849260200190565b958691016100f7565b601f01601f191690565b0190565b60208082526101639291019061011a565b90565b346100f2576101763660046100e7565b61018d610181610785565b60405191829182610152565b0390f35b6001600160a01b031690565b6001600160a01b0381165b036100f257565b905035906101bc8261019d565b565b806101a8565b905035906101bc826101be565b91906040838203126100f257610163906101eb81856101af565b936020016101c4565b9052565b346100f25761018d61021461020e3660046101d1565b9061083a565b60405191829182901515815260200190565b346100f2576102363660046100e7565b61018d6102416107c7565b6040515b9182918290815260200190565b90916060828403126100f25761016361026b84846101af565b9361027981602086016101af565b936040016101c4565b346100f25761018d610214610298366004610252565b91610845565b346100f2576102ae3660046100e7565b61018d6102b96107ac565b6040519182918260ff909116815260200190565b906020828203126100f257610163916101af565b346100f25761018d6102416102f73660046102cd565b6107e9565b346100f25761030c3660046100e7565b610314610491565b604051005b346100f2576103293660046100e7565b61018d61033e6005546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b346100f2576103683660046100e7565b61018d61018161078f565b346100f25761018d6102146103893660046101d1565b90610805565b909182601f830112156100f25781359167ffffffffffffffff83116100f25760200192602083028401116100f257565b906020828203126100f257813567ffffffffffffffff81116100f2576103e5920161038f565b9091565b346100f2576103146103fc3660046103bf565b90610ecf565b91906040838203126100f2576101639061041c81856101af565b936020016101af565b346100f25761018d61024161043b366004610402565b9061081a565b346100f2576103146104543660046102cd565b610592565b610461610499565b6101bc61047f565b6101916101636101639290565b61016390610469565b6101bc61048c6000610476565b6105f3565b6101bc610459565b6005546001600160a01b031633906104b9825b916001600160a01b031690565b036104c15750565b61050b906104ce60405190565b9182917f118cdaa7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b0390fd5b6101bc9061051b610499565b6105256000610476565b6001600160a01b0381166001600160a01b0383161461054857506101bc906105f3565b61050b9061055560405190565b9182917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6101bc9061050f565b906001600160a01b03905b9181191691161790565b610191610163610163926001600160a01b031690565b610163906105b0565b610163906105c6565b906105e86101636105ef926105cf565b825461059b565b9055565b6005546001600160a01b03169061060b8160056105d8565b61063e6106387f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936105cf565b916105cf565b9161064860405190565b80805b0390a3565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610686575b602083101461068157565b610650565b91607f1691610676565b805460009392916106ad6106a383610666565b8085529360200190565b91600181169081156106ff57506001146106c657505050565b6106d99192939450600052602060002090565b916000925b8184106106eb5750500190565b8054848401526020909301926001016106de565b92949550505060ff1916825215156020020190565b9061016391610690565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761075657604052565b61071e565b906101bc6107759261076c60405190565b93848092610714565b0383610734565b6101639061075b565b610163600361077c565b610163600461077c565b6107a66101636101639290565b60ff1690565b6101636012610799565b6101639081565b61016390546107b6565b61016360026107bd565b906107db906105cf565b600052602052604060002090565b610800610163916107f8600090565b5060006107d1565b6107bd565b610815919033610856565b610856565b600190565b610163916108356108009261082d600090565b5060016107d1565b6107d1565b610815919033610afc565b610815929190610810833383610c26565b9291906108636000610476565b936001600160a01b0385166001600160a01b038216146108eb576001600160a01b0385166001600160a01b038316146108a1576101bc9394506109b6565b61050b856108ae60405190565b9182917fec442f05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61050b856108f860405190565b9182917f96c6fd1e000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b6001600160a01b0390911681526060810193926101bc92909160409161095c906020830152565b0152565b90600019906105a6565b6101636101636101639290565b906109876101636105ef9261096a565b8254610960565b634e487b7160e01b600052601160045260246000fd5b919082018092116109b157565b61098e565b8160006109c281610476565b6001600160a01b0381166001600160a01b03851603610a87576109fc906101916109f5886109f060026107bd565b6109a4565b6002610977565b6001600160a01b03831603610a62575050610a226109f584610a1e60026107bd565b0390565b61064b610a58610a527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef936105cf565b936105cf565b9361024560405190565b610a8291610a6f916107d1565b610a7c8561014e836107bd565b90610977565b610a22565b909150610a9761080084846107d1565b858110610abf57849291610191610ab0886109fc940390565b610aba87866107d1565b610977565b8361050b87610acd60405190565b9384937fe450d38c00000000000000000000000000000000000000000000000000000000855260048501610935565b90916101bc926001925b909192610b136000610476565b6001600160a01b0381166001600160a01b03841614610bdc576001600160a01b0381166001600160a01b03851614610b925750610b5984610aba856108358660016107d1565b610b6257505050565b61064b610a58610a527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925936105cf565b61050b90610b9f60405190565b9182917f94280d62000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b61050b90610be960405190565b9182917fe602df05000000000000000000000000000000000000000000000000000000008352600483016001600160a01b03909116815260200190565b90929192610c34818361081a565b936000198503610c46575b5050509050565b808510610c6c57610c5a90610c6394950390565b90600092610b06565b80388080610c3f565b9061050b8592610c7b60405190565b9384937ffb8f41b200000000000000000000000000000000000000000000000000000000855260048501610935565b15610cb157565b60405162461bcd60e51b815260206004820152602c60248201527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60448201527f61746564206164647265737300000000000000000000000000000000000000006064820152608490fd5b906101bc91610d4333610d3d6104ac6101916006546001600160a01b031690565b14610caa565b610dd2565b60001981146109b15760010190565b634e487b7160e01b600052603260045260246000fd5b90359060fe1936829003018212156100f2570190565b90821015610d9a5760206101639202810190610d6d565b610d57565b356101638161019d565b6101f49061096a565b6001600160a01b0390911681526040810192916101bc9160200190610da9565b90919082916000610de28161096a565b8414610e8a57610df19061096a565b835b811015610e8357610e7c81610e1760e0610e11610df3958a89610d83565b01610d9f565b610e2c600191610e268361096a565b90610ed9565b610e3c60e0610e11848b8a610d83565b907fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d191610e74610e6b60405190565b92839283610db2565b0390a1610d48565b9050610df1565b5092505050565b60405162461bcd60e51b815260206004820152601a60248201527f4e6f207472616e73616374696f6e7320746f20636f6e766572740000000000006044820152606490fd5b906101bc91610d1c565b9190610ee56000610476565b926001600160a01b0384166001600160a01b03821614610f09576101bc92936109b6565b61050b846108ae6040519056fea26469706673582212200bf2389345a6ce0308f2ab2a649cd0b188f3cb4d3f587920c3a8cd78fec8128664736f6c63430008140033", + Bin: "0x60806040523480156200001157600080fd5b5060405162001204380380620012048339810160408190526200003491620001e2565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e919062000333565b5060046200008d828262000333565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd919062000410565b60405180910390fd5b620000d18162000156565b506001600160a01b038216620000fb5760405162461bcd60e51b8152600401620000bd9062000461565b6001600160a01b038116620001245760405162461bcd60e51b8152600401620000bd90620004b2565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055620004c4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001c681620001a8565b8114620001d257600080fd5b50565b8051620001b581620001bb565b60008060408385031215620001fa57620001fa600080fd5b6000620002088585620001d5565b92505060206200021b85828601620001d5565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200026657607f821691505b6020821081036200027b576200027b6200023b565b50919050565b6000620001b56200028f8381565b90565b6200029d8362000281565b815460001960089490940293841b1916921b91909117905550565b6000620002c781848462000292565b505050565b81811015620002eb57620002e2600082620002b8565b600101620002cc565b5050565b601f821115620002c7576000818152602090206020601f85010481016020851015620003185750805b6200032c6020601f860104830182620002cc565b5050505050565b81516001600160401b038111156200034f576200034f62000225565b6200035b825462000251565b62000368828285620002ef565b506020601f821160018114620003a05760008315620003875750848201515b600019600885021c19811660028502178555506200032c565b600084815260208120601f198516915b82811015620003d25787850151825560209485019460019092019101620003b0565b5084821015620003f05783870151600019601f87166008021c191681555b50505050600202600101905550565b6200040a81620001a8565b82525050565b60208101620001b58284620003ff565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164648152637265737360e01b602082015290505b60400190565b60208082528101620001b58162000420565b60238152602081017f496e76616c6964207472616e73616374696f6e206465636f646572206164647281526265737360e81b602082015290506200045b565b60208082528101620001b58162000473565b610d3080620004d46000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c578063a9059cbb11610066578063a9059cbb146101a9578063d90d786e146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610126610163366004610a38565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a6a565b6100ec610301565b6101156101b7366004610968565b610310565b6101866101ca366004610aca565b61031e565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a38565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6102f56105a3565b6102ff60006105e9565b565b60606004805461022a90610b5b565b6000336102bb81858561052b565b6006546001600160a01b031633146103515760405162461bcd60e51b815260040161034890610b87565b60405180910390fd5b60008190036103725760405162461bcd60e51b815260040161034890610be8565b60005b8181101561043e576103bd83838381811061039257610392610c23565b90506020028101906103a49190610c39565b6103b69061010081019060e001610a38565b6001610653565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103f0576103f0610c23565b90506020028101906104029190610c39565b6104149061010081019060e001610a38565b6001604051610424929190610c75565b60405180910390a18061043681610ca6565b915050610375565b505050565b61044b6105a3565b6001600160a01b03811661048e5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b610497816105e9565b50565b61043e838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161034893929190610cbf565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b03821661059857600060405163ec442f0560e01b81526004016103489190610a6a565b61043e838383610792565b6005546001600160a01b031633146102ff57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067d57600060405163ec442f0560e01b81526004016103489190610a6a565b61068960008383610792565b5050565b6001600160a01b0384166106d05760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b0383166107135760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce7565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161034893929190610cbf565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b600060208284031215610a4d57610a4d600080fd5b6000610a59848461094c565b949350505050565b6109a981610927565b602081016102c18284610a61565b60008083601f840112610a8d57610a8d600080fd5b50813567ffffffffffffffff811115610aa857610aa8600080fd5b602083019150836020820283011115610ac357610ac3600080fd5b9250929050565b60008060208385031215610ae057610ae0600080fd5b823567ffffffffffffffff811115610afa57610afa600080fd5b610b0685828601610a78565b92509250509250929050565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823560fe1936849003018112610c5357610c53600080fd5b9190910192915050565b60006102c1610c698381565b90565b6109a981610c5d565b60408101610c838285610a61565b6102e66020830184610c6c565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb857610cb8610c90565b5060010190565b60608101610ccd8286610a61565b610cda60208301856109bd565b610a5960408301846109bd565b808201808211156102c1576102c1610c9056fea2646970667358221220574df9a8e14404b64d32a9bc20f6fa3cfe05b7caac95778a582e84b23f19c32264736f6c63430008140033", } // ZenBaseABI is the input ABI used to generate the binding from. diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts index 7f09a923a8..88e5541882 100644 --- a/contracts/hardhat.config.ts +++ b/contracts/hardhat.config.ts @@ -22,7 +22,6 @@ const config: HardhatUserConfig = { solidity: { version: "0.8.20", settings: { - viaIR: true, optimizer: { enabled: true, runs: 1000, From f6a88b419d5a90b28275459c37f8dc607fbf79b8 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 7 Oct 2024 12:16:35 +0300 Subject: [PATCH 10/23] Cleared some unused imports that would bloat the compiled contract size. --- contracts/generated/SystemDeployer/SystemDeployer.go | 2 +- .../TransactionsAnalyzer/TransactionsAnalyzer.go | 2 +- contracts/generated/ZenBase/ZenBase.go | 2 +- contracts/src/system/OnBlockEndCallback.sol | 3 +++ contracts/src/system/Transaction.sol | 9 +-------- 5 files changed, 7 insertions(+), 11 deletions(-) diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 1e7411afd1..4c7d0e3795 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162002468380380620024688339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610de7806200035583390190565b61132c806200113c83390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601481527f5472616e73616374696f6e73416e616c797a6572000000000000000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea264697066735822122089f6b7f86a9a062a63af8f805c4c25fb013c1aa248162cfefbad6aac7da0e47f64736f6c63430008140033608060405234801561001057600080fd5b50610dc7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063508a50f411610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b8063508a50f4146101805780635f03a661146101a757806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a5780634a44e6c11461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b61014561017b366004610a03565b610548565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517fd90d786e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063d90d786e906106679088908890600401610d35565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610d5d565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610d76565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b60006101008301610bca8380610afa565b610bd48582610b0a565b50610be26020840184610b13565b610bef6020860182610919565b50610bfd6040840184610b13565b610c0a6040860182610919565b50610c186060840184610b13565b610c256060860182610919565b50610c336080840184610b23565b610c406080860182610b33565b50610c4e60a0840184610b13565b610c5b60a0860182610919565b50610c6960c0840184610b3c565b85830360c0870152610c7c838284610b99565b92505050610c8d60e0840184610b23565b610c9a60e0860182610b33565b509392505050565b6000610cae8383610bb9565b9392505050565b6000823560fe1936849003018112610ccf57610ccf600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d28578484038952610d068284610cb5565b610d108582610ca2565b94505060208201602099909901989150600101610cef565b5091979650505050505050565b602080825281016108c7818486610cd8565b634e487b7160e01b600052601160045260246000fd5b600060018201610d6f57610d6f610d47565b5060010190565b60408101610d848285610b33565b610cae602083018461091956fea26469706673582212203ccf1914e5a675b9129189d29e25a344ce8257d2099aec64b9ea7fd6bc5914e264736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + Bin: "0x60806040523480156200001157600080fd5b5060405162002468380380620024688339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610de7806200035583390190565b61132c806200113c83390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601481527f5472616e73616374696f6e73416e616c797a6572000000000000000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea264697066735822122055bcaaa605b0cd262c6671971cd7afc0935dad6f86ad30aa3f871fb566c31fbb64736f6c63430008140033608060405234801561001057600080fd5b50610dc7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063508a50f411610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b8063508a50f4146101805780635f03a661146101a757806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a5780634a44e6c11461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b61014561017b366004610a03565b610548565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517fd90d786e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063d90d786e906106679088908890600401610d35565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610d5d565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610d76565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b60006101008301610bca8380610afa565b610bd48582610b0a565b50610be26020840184610b13565b610bef6020860182610919565b50610bfd6040840184610b13565b610c0a6040860182610919565b50610c186060840184610b13565b610c256060860182610919565b50610c336080840184610b23565b610c406080860182610b33565b50610c4e60a0840184610b13565b610c5b60a0860182610919565b50610c6960c0840184610b3c565b85830360c0870152610c7c838284610b99565b92505050610c8d60e0840184610b23565b610c9a60e0860182610b33565b509392505050565b6000610cae8383610bb9565b9392505050565b6000823560fe1936849003018112610ccf57610ccf600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d28578484038952610d068284610cb5565b610d108582610ca2565b94505060208201602099909901989150600101610cef565b5091979650505050505050565b602080825281016108c7818486610cd8565b634e487b7160e01b600052601160045260246000fd5b600060018201610d6f57610d6f610d47565b5060010190565b60408101610d848285610b33565b610cae602083018461091956fea2646970667358221220557a7a45f4c7a153aa142c304ad3537d6721a1738e96e14650618f178649ce0764736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go b/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go index 7e11820ff5..a05d37fda3 100644 --- a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go +++ b/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go @@ -44,7 +44,7 @@ type StructsTransaction struct { // TransactionsAnalyzerMetaData contains all meta data concerning the TransactionsAnalyzer contract. var TransactionsAnalyzerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionsLength\",\"type\":\"uint256\"}],\"name\":\"TransactionsConverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610dc7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063508a50f411610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b8063508a50f4146101805780635f03a661146101a757806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a5780634a44e6c11461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b61014561017b366004610a03565b610548565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517fd90d786e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063d90d786e906106679088908890600401610d35565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610d5d565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610d76565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b60006101008301610bca8380610afa565b610bd48582610b0a565b50610be26020840184610b13565b610bef6020860182610919565b50610bfd6040840184610b13565b610c0a6040860182610919565b50610c186060840184610b13565b610c256060860182610919565b50610c336080840184610b23565b610c406080860182610b33565b50610c4e60a0840184610b13565b610c5b60a0860182610919565b50610c6960c0840184610b3c565b85830360c0870152610c7c838284610b99565b92505050610c8d60e0840184610b23565b610c9a60e0860182610b33565b509392505050565b6000610cae8383610bb9565b9392505050565b6000823560fe1936849003018112610ccf57610ccf600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d28578484038952610d068284610cb5565b610d108582610ca2565b94505060208201602099909901989150600101610cef565b5091979650505050505050565b602080825281016108c7818486610cd8565b634e487b7160e01b600052601160045260246000fd5b600060018201610d6f57610d6f610d47565b5060010190565b60408101610d848285610b33565b610cae602083018461091956fea26469706673582212203ccf1914e5a675b9129189d29e25a344ce8257d2099aec64b9ea7fd6bc5914e264736f6c63430008140033", + Bin: "0x608060405234801561001057600080fd5b50610dc7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063508a50f411610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b8063508a50f4146101805780635f03a661146101a757806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a5780634a44e6c11461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b61014561017b366004610a03565b610548565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517fd90d786e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063d90d786e906106679088908890600401610d35565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610d5d565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610d76565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b60006101008301610bca8380610afa565b610bd48582610b0a565b50610be26020840184610b13565b610bef6020860182610919565b50610bfd6040840184610b13565b610c0a6040860182610919565b50610c186060840184610b13565b610c256060860182610919565b50610c336080840184610b23565b610c406080860182610b33565b50610c4e60a0840184610b13565b610c5b60a0860182610919565b50610c6960c0840184610b3c565b85830360c0870152610c7c838284610b99565b92505050610c8d60e0840184610b23565b610c9a60e0860182610b33565b509392505050565b6000610cae8383610bb9565b9392505050565b6000823560fe1936849003018112610ccf57610ccf600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d28578484038952610d068284610cb5565b610d108582610ca2565b94505060208201602099909901989150600101610cef565b5091979650505050505050565b602080825281016108c7818486610cd8565b634e487b7160e01b600052601160045260246000fd5b600060018201610d6f57610d6f610d47565b5060010190565b60408101610d848285610b33565b610cae602083018461091956fea2646970667358221220557a7a45f4c7a153aa142c304ad3537d6721a1738e96e14650618f178649ce0764736f6c63430008140033", } // TransactionsAnalyzerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ZenBase/ZenBase.go b/contracts/generated/ZenBase/ZenBase.go index 966356b92c..d63cf1c26a 100644 --- a/contracts/generated/ZenBase/ZenBase.go +++ b/contracts/generated/ZenBase/ZenBase.go @@ -44,7 +44,7 @@ type StructsTransaction struct { // ZenBaseMetaData contains all meta data concerning the ZenBase contract. var ZenBaseMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionAnalyzer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"transactionDecoder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162001204380380620012048339810160408190526200003491620001e2565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e919062000333565b5060046200008d828262000333565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd919062000410565b60405180910390fd5b620000d18162000156565b506001600160a01b038216620000fb5760405162461bcd60e51b8152600401620000bd9062000461565b6001600160a01b038116620001245760405162461bcd60e51b8152600401620000bd90620004b2565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055620004c4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001c681620001a8565b8114620001d257600080fd5b50565b8051620001b581620001bb565b60008060408385031215620001fa57620001fa600080fd5b6000620002088585620001d5565b92505060206200021b85828601620001d5565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200026657607f821691505b6020821081036200027b576200027b6200023b565b50919050565b6000620001b56200028f8381565b90565b6200029d8362000281565b815460001960089490940293841b1916921b91909117905550565b6000620002c781848462000292565b505050565b81811015620002eb57620002e2600082620002b8565b600101620002cc565b5050565b601f821115620002c7576000818152602090206020601f85010481016020851015620003185750805b6200032c6020601f860104830182620002cc565b5050505050565b81516001600160401b038111156200034f576200034f62000225565b6200035b825462000251565b62000368828285620002ef565b506020601f821160018114620003a05760008315620003875750848201515b600019600885021c19811660028502178555506200032c565b600084815260208120601f198516915b82811015620003d25787850151825560209485019460019092019101620003b0565b5084821015620003f05783870151600019601f87166008021c191681555b50505050600202600101905550565b6200040a81620001a8565b82525050565b60208101620001b58284620003ff565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164648152637265737360e01b602082015290505b60400190565b60208082528101620001b58162000420565b60238152602081017f496e76616c6964207472616e73616374696f6e206465636f646572206164647281526265737360e81b602082015290506200045b565b60208082528101620001b58162000473565b610d3080620004d46000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c578063a9059cbb11610066578063a9059cbb146101a9578063d90d786e146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610126610163366004610a38565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a6a565b6100ec610301565b6101156101b7366004610968565b610310565b6101866101ca366004610aca565b61031e565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a38565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6102f56105a3565b6102ff60006105e9565b565b60606004805461022a90610b5b565b6000336102bb81858561052b565b6006546001600160a01b031633146103515760405162461bcd60e51b815260040161034890610b87565b60405180910390fd5b60008190036103725760405162461bcd60e51b815260040161034890610be8565b60005b8181101561043e576103bd83838381811061039257610392610c23565b90506020028101906103a49190610c39565b6103b69061010081019060e001610a38565b6001610653565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103f0576103f0610c23565b90506020028101906104029190610c39565b6104149061010081019060e001610a38565b6001604051610424929190610c75565b60405180910390a18061043681610ca6565b915050610375565b505050565b61044b6105a3565b6001600160a01b03811661048e5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b610497816105e9565b50565b61043e838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161034893929190610cbf565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b03821661059857600060405163ec442f0560e01b81526004016103489190610a6a565b61043e838383610792565b6005546001600160a01b031633146102ff57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067d57600060405163ec442f0560e01b81526004016103489190610a6a565b61068960008383610792565b5050565b6001600160a01b0384166106d05760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b0383166107135760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce7565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161034893929190610cbf565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b600060208284031215610a4d57610a4d600080fd5b6000610a59848461094c565b949350505050565b6109a981610927565b602081016102c18284610a61565b60008083601f840112610a8d57610a8d600080fd5b50813567ffffffffffffffff811115610aa857610aa8600080fd5b602083019150836020820283011115610ac357610ac3600080fd5b9250929050565b60008060208385031215610ae057610ae0600080fd5b823567ffffffffffffffff811115610afa57610afa600080fd5b610b0685828601610a78565b92509250509250929050565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823560fe1936849003018112610c5357610c53600080fd5b9190910192915050565b60006102c1610c698381565b90565b6109a981610c5d565b60408101610c838285610a61565b6102e66020830184610c6c565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb857610cb8610c90565b5060010190565b60608101610ccd8286610a61565b610cda60208301856109bd565b610a5960408301846109bd565b808201808211156102c1576102c1610c9056fea2646970667358221220574df9a8e14404b64d32a9bc20f6fa3cfe05b7caac95778a582e84b23f19c32264736f6c63430008140033", + Bin: "0x60806040523480156200001157600080fd5b5060405162001204380380620012048339810160408190526200003491620001e2565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e919062000333565b5060046200008d828262000333565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd919062000410565b60405180910390fd5b620000d18162000156565b506001600160a01b038216620000fb5760405162461bcd60e51b8152600401620000bd9062000461565b6001600160a01b038116620001245760405162461bcd60e51b8152600401620000bd90620004b2565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055620004c4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001c681620001a8565b8114620001d257600080fd5b50565b8051620001b581620001bb565b60008060408385031215620001fa57620001fa600080fd5b6000620002088585620001d5565b92505060206200021b85828601620001d5565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200026657607f821691505b6020821081036200027b576200027b6200023b565b50919050565b6000620001b56200028f8381565b90565b6200029d8362000281565b815460001960089490940293841b1916921b91909117905550565b6000620002c781848462000292565b505050565b81811015620002eb57620002e2600082620002b8565b600101620002cc565b5050565b601f821115620002c7576000818152602090206020601f85010481016020851015620003185750805b6200032c6020601f860104830182620002cc565b5050505050565b81516001600160401b038111156200034f576200034f62000225565b6200035b825462000251565b62000368828285620002ef565b506020601f821160018114620003a05760008315620003875750848201515b600019600885021c19811660028502178555506200032c565b600084815260208120601f198516915b82811015620003d25787850151825560209485019460019092019101620003b0565b5084821015620003f05783870151600019601f87166008021c191681555b50505050600202600101905550565b6200040a81620001a8565b82525050565b60208101620001b58284620003ff565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164648152637265737360e01b602082015290505b60400190565b60208082528101620001b58162000420565b60238152602081017f496e76616c6964207472616e73616374696f6e206465636f646572206164647281526265737360e81b602082015290506200045b565b60208082528101620001b58162000473565b610d3080620004d46000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c578063a9059cbb11610066578063a9059cbb146101a9578063d90d786e146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610126610163366004610a38565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a6a565b6100ec610301565b6101156101b7366004610968565b610310565b6101866101ca366004610aca565b61031e565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a38565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6102f56105a3565b6102ff60006105e9565b565b60606004805461022a90610b5b565b6000336102bb81858561052b565b6006546001600160a01b031633146103515760405162461bcd60e51b815260040161034890610b87565b60405180910390fd5b60008190036103725760405162461bcd60e51b815260040161034890610be8565b60005b8181101561043e576103bd83838381811061039257610392610c23565b90506020028101906103a49190610c39565b6103b69061010081019060e001610a38565b6001610653565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103f0576103f0610c23565b90506020028101906104029190610c39565b6104149061010081019060e001610a38565b6001604051610424929190610c75565b60405180910390a18061043681610ca6565b915050610375565b505050565b61044b6105a3565b6001600160a01b03811661048e5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b610497816105e9565b50565b61043e838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161034893929190610cbf565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b03821661059857600060405163ec442f0560e01b81526004016103489190610a6a565b61043e838383610792565b6005546001600160a01b031633146102ff57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067d57600060405163ec442f0560e01b81526004016103489190610a6a565b61068960008383610792565b5050565b6001600160a01b0384166106d05760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b0383166107135760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce7565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161034893929190610cbf565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b600060208284031215610a4d57610a4d600080fd5b6000610a59848461094c565b949350505050565b6109a981610927565b602081016102c18284610a61565b60008083601f840112610a8d57610a8d600080fd5b50813567ffffffffffffffff811115610aa857610aa8600080fd5b602083019150836020820283011115610ac357610ac3600080fd5b9250929050565b60008060208385031215610ae057610ae0600080fd5b823567ffffffffffffffff811115610afa57610afa600080fd5b610b0685828601610a78565b92509250509250929050565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823560fe1936849003018112610c5357610c53600080fd5b9190910192915050565b60006102c1610c698381565b90565b6109a981610c5d565b60408101610c838285610a61565b6102e66020830184610c6c565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb857610cb8610c90565b5060010190565b60608101610ccd8286610a61565b610cda60208301856109bd565b610a5960408301846109bd565b808201808211156102c1576102c1610c9056fea2646970667358221220693ac5a436ea6f1eefc8eb89504257389c7cce7d5a9538a71c15f87054d9b56b64736f6c63430008140033", } // ZenBaseABI is the input ABI used to generate the binding from. diff --git a/contracts/src/system/OnBlockEndCallback.sol b/contracts/src/system/OnBlockEndCallback.sol index c09905720d..21971d80ea 100644 --- a/contracts/src/system/OnBlockEndCallback.sol +++ b/contracts/src/system/OnBlockEndCallback.sol @@ -3,6 +3,9 @@ pragma solidity ^0.8.0; import "./Transaction.sol"; +// OnBlockEndCallback is the interface that a contract needs to implement in order to support +// being called from the system transaction analyzer contract. Note that contracts are added as a callback +// with a manual authorization flow that whitelists them. interface OnBlockEndCallback { function onBlockEnd(Structs.Transaction[] calldata transactions) external; } \ No newline at end of file diff --git a/contracts/src/system/Transaction.sol b/contracts/src/system/Transaction.sol index 7ae8fb68d7..6036558c80 100644 --- a/contracts/src/system/Transaction.sol +++ b/contracts/src/system/Transaction.sol @@ -1,15 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; - - - +// Structs is a library that contains the structs used to represent a TEN transaction in the system contracts. library Structs { - using MessageHashUtils for bytes32; - using ECDSA for bytes32; - struct Transaction { uint8 txType; uint256 nonce; From eeca0886fb3014d7fdf382cbd90cf0334e650992 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 7 Oct 2024 12:52:22 +0300 Subject: [PATCH 11/23] Addressed some PR comments. Moved code around. --- .../SystemDeployer/SystemDeployer.go | 2 +- .../TransactionsAnalyzer.go | 33 ++++++++-------- contracts/generated/ZenBase/ZenBase.go | 33 ++++++++-------- contracts/src/system/Transaction.sol | 1 + go/enclave/components/batch_executor.go | 27 +------------ go/enclave/system/hooks.go | 38 ++++++++++++++++--- 6 files changed, 70 insertions(+), 64 deletions(-) diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 4c7d0e3795..36d04012b1 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162002468380380620024688339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610de7806200035583390190565b61132c806200113c83390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601481527f5472616e73616374696f6e73416e616c797a6572000000000000000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea264697066735822122055bcaaa605b0cd262c6671971cd7afc0935dad6f86ad30aa3f871fb566c31fbb64736f6c63430008140033608060405234801561001057600080fd5b50610dc7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063508a50f411610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b8063508a50f4146101805780635f03a661146101a757806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a5780634a44e6c11461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b61014561017b366004610a03565b610548565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517fd90d786e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063d90d786e906106679088908890600401610d35565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610d5d565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610d76565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b60006101008301610bca8380610afa565b610bd48582610b0a565b50610be26020840184610b13565b610bef6020860182610919565b50610bfd6040840184610b13565b610c0a6040860182610919565b50610c186060840184610b13565b610c256060860182610919565b50610c336080840184610b23565b610c406080860182610b33565b50610c4e60a0840184610b13565b610c5b60a0860182610919565b50610c6960c0840184610b3c565b85830360c0870152610c7c838284610b99565b92505050610c8d60e0840184610b23565b610c9a60e0860182610b33565b509392505050565b6000610cae8383610bb9565b9392505050565b6000823560fe1936849003018112610ccf57610ccf600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d28578484038952610d068284610cb5565b610d108582610ca2565b94505060208201602099909901989150600101610cef565b5091979650505050505050565b602080825281016108c7818486610cd8565b634e487b7160e01b600052601160045260246000fd5b600060018201610d6f57610d6f610d47565b5060010190565b60408101610d848285610b33565b610cae602083018461091956fea2646970667358221220557a7a45f4c7a153aa142c304ad3537d6721a1738e96e14650618f178649ce0764736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + Bin: "0x60806040523480156200001157600080fd5b50604051620024a9380380620024a98339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610e28806200035583390190565b61132c806200117d83390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601481527f5472616e73616374696f6e73416e616c797a6572000000000000000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea2646970667358221220ff9df1e4c29f3a37150345a049596501d6997b1caf7da1bb6cb030b1eeed4a7f64736f6c63430008140033608060405234801561001057600080fd5b50610e08806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063d547741f1161005b578063d547741f146101fa578063dfc6cc361461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806391d14854146101bb578063a217fddf146101f257600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101c9366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b610145610208366004610952565b610548565b61014561021b366004610a03565b61056d565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b600082815260208190526040902060010154610563816106d0565b6103558383610787565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610597816106d0565b60008290036105db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d290610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061060b90849061091f565b60405180910390a160005b6001548110156103555760006001828154811061063557610635610ad0565b6000918252602090912001546040517fd43827cb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063d43827cb9061068c9088908890600401610d76565b600060405180830381600087803b1580156106a657600080fd5b505af11580156106ba573d6000803e3d6000fd5b5050505050806106c990610d9e565b9050610616565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105d2929190610db7565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b60006101208301610bed8380610afa565b610bf78582610b0a565b50610c056020840184610b13565b610c126020860182610919565b50610c206040840184610b13565b610c2d6040860182610919565b50610c3b6060840184610b13565b610c486060860182610919565b50610c566080840184610b23565b610c636080860182610b33565b50610c7160a0840184610b13565b610c7e60a0860182610919565b50610c8c60c0840184610b3c565b85830360c0870152610c9f838284610b99565b92505050610cb060e0840184610b23565b610cbd60e0860182610b33565b50610ccc610100840184610bcc565b610cda6101008601826108cf565b509392505050565b6000610cee8383610bdc565b9392505050565b6000823561011e1936849003018112610d1057610d10600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d69578484038952610d478284610cf5565b610d518582610ce2565b94505060208201602099909901989150600101610d30565b5091979650505050505050565b602080825281016108c7818486610d19565b634e487b7160e01b600052601160045260246000fd5b600060018201610db057610db0610d88565b5060010190565b60408101610dc58285610b33565b610cee602083018461091956fea2646970667358221220735d7f7f76e88e4e593c9d0b792373fd020ef0f687d35555e63a4c6ea0dfccee64736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go b/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go index a05d37fda3..f5e58fe14b 100644 --- a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go +++ b/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go @@ -31,20 +31,21 @@ var ( // StructsTransaction is an auto generated low-level Go binding around an user-defined struct. type StructsTransaction struct { - TxType uint8 - Nonce *big.Int - GasPrice *big.Int - GasLimit *big.Int - To common.Address - Value *big.Int - Data []byte - From common.Address + TxType uint8 + Nonce *big.Int + GasPrice *big.Int + GasLimit *big.Int + To common.Address + Value *big.Int + Data []byte + From common.Address + Successful bool } // TransactionsAnalyzerMetaData contains all meta data concerning the TransactionsAnalyzer contract. var TransactionsAnalyzerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionsLength\",\"type\":\"uint256\"}],\"name\":\"TransactionsConverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610dc7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063508a50f411610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b8063508a50f4146101805780635f03a661146101a757806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a5780634a44e6c11461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b61014561017b366004610a03565b610548565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517fd90d786e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063d90d786e906106679088908890600401610d35565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610d5d565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610d76565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b60006101008301610bca8380610afa565b610bd48582610b0a565b50610be26020840184610b13565b610bef6020860182610919565b50610bfd6040840184610b13565b610c0a6040860182610919565b50610c186060840184610b13565b610c256060860182610919565b50610c336080840184610b23565b610c406080860182610b33565b50610c4e60a0840184610b13565b610c5b60a0860182610919565b50610c6960c0840184610b3c565b85830360c0870152610c7c838284610b99565b92505050610c8d60e0840184610b23565b610c9a60e0860182610b33565b509392505050565b6000610cae8383610bb9565b9392505050565b6000823560fe1936849003018112610ccf57610ccf600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d28578484038952610d068284610cb5565b610d108582610ca2565b94505060208201602099909901989150600101610cef565b5091979650505050505050565b602080825281016108c7818486610cd8565b634e487b7160e01b600052601160045260246000fd5b600060018201610d6f57610d6f610d47565b5060010190565b60408101610d848285610b33565b610cae602083018461091956fea2646970667358221220557a7a45f4c7a153aa142c304ad3537d6721a1738e96e14650618f178649ce0764736f6c63430008140033", + ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionsLength\",\"type\":\"uint256\"}],\"name\":\"TransactionsConverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50610e08806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063d547741f1161005b578063d547741f146101fa578063dfc6cc361461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806391d14854146101bb578063a217fddf146101f257600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101c9366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b610145610208366004610952565b610548565b61014561021b366004610a03565b61056d565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b600082815260208190526040902060010154610563816106d0565b6103558383610787565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610597816106d0565b60008290036105db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d290610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061060b90849061091f565b60405180910390a160005b6001548110156103555760006001828154811061063557610635610ad0565b6000918252602090912001546040517fd43827cb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063d43827cb9061068c9088908890600401610d76565b600060405180830381600087803b1580156106a657600080fd5b505af11580156106ba573d6000803e3d6000fd5b5050505050806106c990610d9e565b9050610616565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105d2929190610db7565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b60006101208301610bed8380610afa565b610bf78582610b0a565b50610c056020840184610b13565b610c126020860182610919565b50610c206040840184610b13565b610c2d6040860182610919565b50610c3b6060840184610b13565b610c486060860182610919565b50610c566080840184610b23565b610c636080860182610b33565b50610c7160a0840184610b13565b610c7e60a0860182610919565b50610c8c60c0840184610b3c565b85830360c0870152610c9f838284610b99565b92505050610cb060e0840184610b23565b610cbd60e0860182610b33565b50610ccc610100840184610bcc565b610cda6101008601826108cf565b509392505050565b6000610cee8383610bdc565b9392505050565b6000823561011e1936849003018112610d1057610d10600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d69578484038952610d478284610cf5565b610d518582610ce2565b94505060208201602099909901989150600101610d30565b5091979650505050505050565b602080825281016108c7818486610d19565b634e487b7160e01b600052601160045260246000fd5b600060018201610db057610db0610d88565b5060010190565b60408101610dc58285610b33565b610cee602083018461091956fea2646970667358221220735d7f7f76e88e4e593c9d0b792373fd020ef0f687d35555e63a4c6ea0dfccee64736f6c63430008140033", } // TransactionsAnalyzerABI is the input ABI used to generate the binding from. @@ -463,23 +464,23 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) Initialize(e return _TransactionsAnalyzer.Contract.Initialize(&_TransactionsAnalyzer.TransactOpts, eoaAdmin, authorizedCaller) } -// OnBlock is a paid mutator transaction binding the contract method 0x4a44e6c1. +// OnBlock is a paid mutator transaction binding the contract method 0xdfc6cc36. // -// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address)[] transactions) returns() +// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool)[] transactions) returns() func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) OnBlock(opts *bind.TransactOpts, transactions []StructsTransaction) (*types.Transaction, error) { return _TransactionsAnalyzer.contract.Transact(opts, "onBlock", transactions) } -// OnBlock is a paid mutator transaction binding the contract method 0x4a44e6c1. +// OnBlock is a paid mutator transaction binding the contract method 0xdfc6cc36. // -// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address)[] transactions) returns() +// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool)[] transactions) returns() func (_TransactionsAnalyzer *TransactionsAnalyzerSession) OnBlock(transactions []StructsTransaction) (*types.Transaction, error) { return _TransactionsAnalyzer.Contract.OnBlock(&_TransactionsAnalyzer.TransactOpts, transactions) } -// OnBlock is a paid mutator transaction binding the contract method 0x4a44e6c1. +// OnBlock is a paid mutator transaction binding the contract method 0xdfc6cc36. // -// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address)[] transactions) returns() +// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool)[] transactions) returns() func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) OnBlock(transactions []StructsTransaction) (*types.Transaction, error) { return _TransactionsAnalyzer.Contract.OnBlock(&_TransactionsAnalyzer.TransactOpts, transactions) } diff --git a/contracts/generated/ZenBase/ZenBase.go b/contracts/generated/ZenBase/ZenBase.go index d63cf1c26a..ac5c1cfad1 100644 --- a/contracts/generated/ZenBase/ZenBase.go +++ b/contracts/generated/ZenBase/ZenBase.go @@ -31,20 +31,21 @@ var ( // StructsTransaction is an auto generated low-level Go binding around an user-defined struct. type StructsTransaction struct { - TxType uint8 - Nonce *big.Int - GasPrice *big.Int - GasLimit *big.Int - To common.Address - Value *big.Int - Data []byte - From common.Address + TxType uint8 + Nonce *big.Int + GasPrice *big.Int + GasLimit *big.Int + To common.Address + Value *big.Int + Data []byte + From common.Address + Successful bool } // ZenBaseMetaData contains all meta data concerning the ZenBase contract. var ZenBaseMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionAnalyzer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"transactionDecoder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162001204380380620012048339810160408190526200003491620001e2565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e919062000333565b5060046200008d828262000333565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd919062000410565b60405180910390fd5b620000d18162000156565b506001600160a01b038216620000fb5760405162461bcd60e51b8152600401620000bd9062000461565b6001600160a01b038116620001245760405162461bcd60e51b8152600401620000bd90620004b2565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055620004c4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001c681620001a8565b8114620001d257600080fd5b50565b8051620001b581620001bb565b60008060408385031215620001fa57620001fa600080fd5b6000620002088585620001d5565b92505060206200021b85828601620001d5565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200026657607f821691505b6020821081036200027b576200027b6200023b565b50919050565b6000620001b56200028f8381565b90565b6200029d8362000281565b815460001960089490940293841b1916921b91909117905550565b6000620002c781848462000292565b505050565b81811015620002eb57620002e2600082620002b8565b600101620002cc565b5050565b601f821115620002c7576000818152602090206020601f85010481016020851015620003185750805b6200032c6020601f860104830182620002cc565b5050505050565b81516001600160401b038111156200034f576200034f62000225565b6200035b825462000251565b62000368828285620002ef565b506020601f821160018114620003a05760008315620003875750848201515b600019600885021c19811660028502178555506200032c565b600084815260208120601f198516915b82811015620003d25787850151825560209485019460019092019101620003b0565b5084821015620003f05783870151600019601f87166008021c191681555b50505050600202600101905550565b6200040a81620001a8565b82525050565b60208101620001b58284620003ff565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164648152637265737360e01b602082015290505b60400190565b60208082528101620001b58162000420565b60238152602081017f496e76616c6964207472616e73616374696f6e206465636f646572206164647281526265737360e81b602082015290506200045b565b60208082528101620001b58162000473565b610d3080620004d46000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c578063a9059cbb11610066578063a9059cbb146101a9578063d90d786e146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610126610163366004610a38565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a6a565b6100ec610301565b6101156101b7366004610968565b610310565b6101866101ca366004610aca565b61031e565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a38565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6102f56105a3565b6102ff60006105e9565b565b60606004805461022a90610b5b565b6000336102bb81858561052b565b6006546001600160a01b031633146103515760405162461bcd60e51b815260040161034890610b87565b60405180910390fd5b60008190036103725760405162461bcd60e51b815260040161034890610be8565b60005b8181101561043e576103bd83838381811061039257610392610c23565b90506020028101906103a49190610c39565b6103b69061010081019060e001610a38565b6001610653565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103f0576103f0610c23565b90506020028101906104029190610c39565b6104149061010081019060e001610a38565b6001604051610424929190610c75565b60405180910390a18061043681610ca6565b915050610375565b505050565b61044b6105a3565b6001600160a01b03811661048e5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b610497816105e9565b50565b61043e838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161034893929190610cbf565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b03821661059857600060405163ec442f0560e01b81526004016103489190610a6a565b61043e838383610792565b6005546001600160a01b031633146102ff57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067d57600060405163ec442f0560e01b81526004016103489190610a6a565b61068960008383610792565b5050565b6001600160a01b0384166106d05760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b0383166107135760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce7565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161034893929190610cbf565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b600060208284031215610a4d57610a4d600080fd5b6000610a59848461094c565b949350505050565b6109a981610927565b602081016102c18284610a61565b60008083601f840112610a8d57610a8d600080fd5b50813567ffffffffffffffff811115610aa857610aa8600080fd5b602083019150836020820283011115610ac357610ac3600080fd5b9250929050565b60008060208385031215610ae057610ae0600080fd5b823567ffffffffffffffff811115610afa57610afa600080fd5b610b0685828601610a78565b92509250509250929050565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823560fe1936849003018112610c5357610c53600080fd5b9190910192915050565b60006102c1610c698381565b90565b6109a981610c5d565b60408101610c838285610a61565b6102e66020830184610c6c565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb857610cb8610c90565b5060010190565b60608101610ccd8286610a61565b610cda60208301856109bd565b610a5960408301846109bd565b808201808211156102c1576102c1610c9056fea2646970667358221220693ac5a436ea6f1eefc8eb89504257389c7cce7d5a9538a71c15f87054d9b56b64736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionAnalyzer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"transactionDecoder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162001205380380620012058339810160408190526200003491620001e2565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e919062000333565b5060046200008d828262000333565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd919062000410565b60405180910390fd5b620000d18162000156565b506001600160a01b038216620000fb5760405162461bcd60e51b8152600401620000bd9062000461565b6001600160a01b038116620001245760405162461bcd60e51b8152600401620000bd90620004b2565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055620004c4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001c681620001a8565b8114620001d257600080fd5b50565b8051620001b581620001bb565b60008060408385031215620001fa57620001fa600080fd5b6000620002088585620001d5565b92505060206200021b85828601620001d5565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200026657607f821691505b6020821081036200027b576200027b6200023b565b50919050565b6000620001b56200028f8381565b90565b6200029d8362000281565b815460001960089490940293841b1916921b91909117905550565b6000620002c781848462000292565b505050565b81811015620002eb57620002e2600082620002b8565b600101620002cc565b5050565b601f821115620002c7576000818152602090206020601f85010481016020851015620003185750805b6200032c6020601f860104830182620002cc565b5050505050565b81516001600160401b038111156200034f576200034f62000225565b6200035b825462000251565b62000368828285620002ef565b506020601f821160018114620003a05760008315620003875750848201515b600019600885021c19811660028502178555506200032c565b600084815260208120601f198516915b82811015620003d25787850151825560209485019460019092019101620003b0565b5084821015620003f05783870151600019601f87166008021c191681555b50505050600202600101905550565b6200040a81620001a8565b82525050565b60208101620001b58284620003ff565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164648152637265737360e01b602082015290505b60400190565b60208082528101620001b58162000420565b60238152602081017f496e76616c6964207472616e73616374696f6e206465636f646572206164647281526265737360e81b602082015290506200045b565b60208082528101620001b58162000473565b610d3180620004d46000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c578063a9059cbb11610066578063a9059cbb146101a9578063d43827cb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610126610163366004610a38565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a6a565b6100ec610301565b6101156101b7366004610968565b610310565b6101866101ca366004610aca565b61031e565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a38565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6102f56105a3565b6102ff60006105e9565b565b60606004805461022a90610b5b565b6000336102bb81858561052b565b6006546001600160a01b031633146103515760405162461bcd60e51b815260040161034890610b87565b60405180910390fd5b60008190036103725760405162461bcd60e51b815260040161034890610be8565b60005b8181101561043e576103bd83838381811061039257610392610c23565b90506020028101906103a49190610c39565b6103b69061010081019060e001610a38565b6001610653565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103f0576103f0610c23565b90506020028101906104029190610c39565b6104149061010081019060e001610a38565b6001604051610424929190610c76565b60405180910390a18061043681610ca7565b915050610375565b505050565b61044b6105a3565b6001600160a01b03811661048e5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b610497816105e9565b50565b61043e838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161034893929190610cc0565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b03821661059857600060405163ec442f0560e01b81526004016103489190610a6a565b61043e838383610792565b6005546001600160a01b031633146102ff57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067d57600060405163ec442f0560e01b81526004016103489190610a6a565b61068960008383610792565b5050565b6001600160a01b0384166106d05760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b0383166107135760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce8565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161034893929190610cc0565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b600060208284031215610a4d57610a4d600080fd5b6000610a59848461094c565b949350505050565b6109a981610927565b602081016102c18284610a61565b60008083601f840112610a8d57610a8d600080fd5b50813567ffffffffffffffff811115610aa857610aa8600080fd5b602083019150836020820283011115610ac357610ac3600080fd5b9250929050565b60008060208385031215610ae057610ae0600080fd5b823567ffffffffffffffff811115610afa57610afa600080fd5b610b0685828601610a78565b92509250509250929050565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561011e1936849003018112610c5457610c54600080fd5b9190910192915050565b60006102c1610c6a8381565b90565b6109a981610c5e565b60408101610c848285610a61565b6102e66020830184610c6d565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb957610cb9610c91565b5060010190565b60608101610cce8286610a61565b610cdb60208301856109bd565b610a5960408301846109bd565b808201808211156102c1576102c1610c9156fea264697066735822122048701ff6e6532ede0b0df9de82baa5245930739e2e68d3b8758fae219541e75564736f6c63430008140033", } // ZenBaseABI is the input ABI used to generate the binding from. @@ -452,23 +453,23 @@ func (_ZenBase *ZenBaseTransactorSession) Approve(spender common.Address, value return _ZenBase.Contract.Approve(&_ZenBase.TransactOpts, spender, value) } -// OnBlockEnd is a paid mutator transaction binding the contract method 0xd90d786e. +// OnBlockEnd is a paid mutator transaction binding the contract method 0xd43827cb. // -// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address)[] transactions) returns() +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool)[] transactions) returns() func (_ZenBase *ZenBaseTransactor) OnBlockEnd(opts *bind.TransactOpts, transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.contract.Transact(opts, "onBlockEnd", transactions) } -// OnBlockEnd is a paid mutator transaction binding the contract method 0xd90d786e. +// OnBlockEnd is a paid mutator transaction binding the contract method 0xd43827cb. // -// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address)[] transactions) returns() +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool)[] transactions) returns() func (_ZenBase *ZenBaseSession) OnBlockEnd(transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.Contract.OnBlockEnd(&_ZenBase.TransactOpts, transactions) } -// OnBlockEnd is a paid mutator transaction binding the contract method 0xd90d786e. +// OnBlockEnd is a paid mutator transaction binding the contract method 0xd43827cb. // -// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address)[] transactions) returns() +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool)[] transactions) returns() func (_ZenBase *ZenBaseTransactorSession) OnBlockEnd(transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.Contract.OnBlockEnd(&_ZenBase.TransactOpts, transactions) } diff --git a/contracts/src/system/Transaction.sol b/contracts/src/system/Transaction.sol index 6036558c80..4d87c53924 100644 --- a/contracts/src/system/Transaction.sol +++ b/contracts/src/system/Transaction.sol @@ -12,5 +12,6 @@ library Structs { uint256 value; bytes data; address from; + bool successful; } } \ No newline at end of file diff --git a/go/enclave/components/batch_executor.go b/go/enclave/components/batch_executor.go index 3863af075f..515812218b 100644 --- a/go/enclave/components/batch_executor.go +++ b/go/enclave/components/batch_executor.go @@ -11,7 +11,6 @@ import ( "github.com/holiman/uint256" - "github.com/ten-protocol/go-ten/contracts/generated/TransactionsAnalyzer" "github.com/ten-protocol/go-ten/go/config" "github.com/ten-protocol/go-ten/go/common/gethencoding" @@ -221,41 +220,17 @@ func (executor *batchExecutor) ComputeBatch(ctx context.Context, context *BatchE } onBlockSuccessfulTx, _, onBlockTxResult, err := executor.processTransactions(ctx, batch, len(successfulTxs), onBlockPricedTxes, stateDB, context.ChainConfig, true) if err != nil { - // todo: remove once feature finished return nil, fmt.Errorf("could not process on block end transaction hook. Cause: %w", err) } + // Ensure the onBlock callback transaction is successful. It should NEVER fail. if err = executor.verifySyntheticTransactionsSuccess(onBlockPricedTxes, onBlockSuccessfulTx, onBlockTxResult); err != nil { - // todo: remove once feature finished return nil, fmt.Errorf("batch computation failed due to onBlock hook reverting. Cause: %w", err) } - // Parse onBlockReceipt for the TransactionsConverted event - abi, err := TransactionsAnalyzer.TransactionsAnalyzerMetaData.GetAbi() - if err != nil { - return nil, err - } result := onBlockTxResult[0] if ok, err := executor.systemContracts.VerifyOnBlockReceipt(successfulTxs, result.Receipt); !ok || err != nil { executor.logger.Error("VerifyOnBlockReceipt failed", "error", err, "ok", ok) return nil, fmt.Errorf("VerifyOnBlockReceipt failed") } - - if len(result.Receipt.Logs) == 0 { - return nil, fmt.Errorf("no logs in onBlockReceipt") - } - - for _, log := range result.Receipt.Logs { - if len(log.Topics) > 0 && log.Topics[0] == abi.Events["TransactionsConverted"].ID { // TransactionsConverted event signature - if len(log.Data) == 32 { // uint256 is 32 bytes - transactionsConverted := new(big.Int).SetBytes(log.Data) - if transactionsConverted.Uint64() != uint64(len(context.Transactions)) { - return nil, fmt.Errorf("mismatch in TransactionsConverted event: expected %d, got %d", len(context.Transactions), transactionsConverted.Uint64()) - } - } else { - return nil, fmt.Errorf("invalid data length for TransactionsConverted event") - } - break - } - } } else if err == nil && batch.Header.SequencerOrderNo.Uint64() > 2 { executor.logger.Crit("Bootstrapping of network failed! System contract hooks have not been initialised after genesis.") } diff --git a/go/enclave/system/hooks.go b/go/enclave/system/hooks.go index 29f630817f..b58a90bed0 100644 --- a/go/enclave/system/hooks.go +++ b/go/enclave/system/hooks.go @@ -140,14 +140,20 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex solidityTransactions := make([]TransactionsAnalyzer.StructsTransaction, 0) + txSuccessMap := map[gethcommon.Hash]bool{} + for _, receipt := range receipts { + txSuccessMap[receipt.TxHash] = receipt.Status == types.ReceiptStatusSuccessful + } + for _, tx := range transactions { // Start of Selection transaction := TransactionsAnalyzer.StructsTransaction{ - Nonce: big.NewInt(int64(tx.Nonce())), - GasPrice: tx.GasPrice(), - GasLimit: big.NewInt(int64(tx.Gas())), - Value: tx.Value(), - Data: tx.Data(), + Nonce: big.NewInt(int64(tx.Nonce())), + GasPrice: tx.GasPrice(), + GasLimit: big.NewInt(int64(tx.Gas())), + Value: tx.Value(), + Data: tx.Data(), + Successful: txSuccessMap[tx.Hash()], } if tx.To() != nil { transaction.To = *tx.To() @@ -209,6 +215,28 @@ func (s *systemContractCallbacks) VerifyOnBlockReceipt(transactions common.L2Tra return false, fmt.Errorf("failed to get ABI %w", err) } + if len(receipt.Logs) == 0 { + s.logger.Error("VerifyOnBlockReceipt: Synthetic transaction has no logs", "transactionHash", receipt.TxHash.Hex()) + return false, fmt.Errorf("no logs in onBlockReceipt") + } + + // Find the TransactionsConverted event in the onBlockReceipt and verify the number of transactions converted + // matches the number of transactions in the batch. Mostly paranoia code. + for _, log := range receipt.Logs { + if len(log.Topics) > 0 && log.Topics[0] == abi.Events["TransactionsConverted"].ID { // TransactionsConverted event signature + if len(log.Data) != 32 { + s.logger.Error("VerifyOnBlockReceipt: Invalid data length for TransactionsConverted event", "expected", 32, "got", len(log.Data)) + return false, fmt.Errorf("invalid data length for TransactionsConverted event") + } + transactionsConverted := new(big.Int).SetBytes(log.Data) + if transactionsConverted.Uint64() != uint64(len(transactions)) { + s.logger.Error("VerifyOnBlockReceipt: Mismatch in TransactionsConverted event", "expected", len(transactions), "got", transactionsConverted.Uint64()) + return false, fmt.Errorf("mismatch in TransactionsConverted event: expected %d, got %d", len(transactions), transactionsConverted.Uint64()) + } + break + } + } + for _, log := range receipt.Logs { if log.Topics[0] != abi.Events["TransactionProcessed"].ID { continue From d8468f7e508532f8eb2c5feb530fc1b45d03162e Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 7 Oct 2024 13:38:32 +0300 Subject: [PATCH 12/23] Returning the sleep. --- integration/simulation/simulation.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration/simulation/simulation.go b/integration/simulation/simulation.go index 2ede0bad51..4e9f4e869f 100644 --- a/integration/simulation/simulation.go +++ b/integration/simulation/simulation.go @@ -60,7 +60,7 @@ func (s *Simulation) Start() { // Arbitrary sleep to wait for RPC clients to get up and running // and for all l2 nodes to receive the genesis l2 batch // todo - instead of sleeping, it would be better to poll - //time.Sleep(10 * time.Second) //todo - determine if this is till necessary? + time.Sleep(10 * time.Second) s.bridgeFundingToTen() s.deployTenZen() // Deploy the ZenBase contract From 51e219bafa03c4424df75a6b916c4681522fe3d0 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 7 Oct 2024 14:38:40 +0300 Subject: [PATCH 13/23] Workaround for subscriptions. --- go/obsclient/authclient.go | 7 +++++++ go/rpc/encrypted_client.go | 4 ++-- integration/simulation/simulation.go | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/go/obsclient/authclient.go b/go/obsclient/authclient.go index 69fe714dc1..9014f92d61 100644 --- a/go/obsclient/authclient.go +++ b/go/obsclient/authclient.go @@ -192,7 +192,14 @@ func (ac *AuthObsClient) BalanceAt(ctx context.Context, blockNumber *big.Int) (* return (*big.Int)(&result), err } +// Workaround for creating a ETH client interface to be used in generated contracts interacting. +// Obviously any usage should avoid subscriptions as it will not work. func (ac *AuthObsClient) SubscribeFilterLogs(ctx context.Context, filterCriteria ethereum.FilterQuery, ch chan<- types.Log) (ethereum.Subscription, error) { + panic("not implemented") +} + +// Real method that we have used in TEN for subscription +func (ac *AuthObsClient) SubscribeFilterLogsTEN(ctx context.Context, filterCriteria ethereum.FilterQuery, ch chan types.Log) (ethereum.Subscription, error) { return ac.rpcClient.Subscribe(ctx, rpc.SubscribeNamespace, ch, rpc.SubscriptionTypeLogs, filterCriteria) } diff --git a/go/rpc/encrypted_client.go b/go/rpc/encrypted_client.go index bfff690860..abc4030fb5 100644 --- a/go/rpc/encrypted_client.go +++ b/go/rpc/encrypted_client.go @@ -235,7 +235,7 @@ func (c *EncRPCClient) decryptResponse(encryptedBytes []byte) ([]byte, error) { // creates a subscription to the TEN node, but decrypts the messages from that channel and forwards them to the `ch` func (c *EncRPCClient) logSubscription(ctx context.Context, namespace string, ch interface{}, args ...any) (*gethrpc.ClientSubscription, error) { - outboundChannel, ok := ch.(chan<- types.Log) + outboundChannel, ok := ch.(chan types.Log) if !ok { return nil, fmt.Errorf("expected a channel of type `chan types.Log`, got %T", ch) } @@ -281,7 +281,7 @@ func (c *EncRPCClient) logSubscription(ctx context.Context, namespace string, ch return backendSub, nil } -func (c *EncRPCClient) onMessage(encLog []byte, outboundChannel chan<- types.Log) error { +func (c *EncRPCClient) onMessage(encLog []byte, outboundChannel chan types.Log) error { jsonLogs, err := c.decryptResponse(encLog) if err != nil { c.logger.Error("could not decrypt logs received from subscription.", log.ErrKey, err) diff --git a/integration/simulation/simulation.go b/integration/simulation/simulation.go index 4e9f4e869f..e15e10cf44 100644 --- a/integration/simulation/simulation.go +++ b/integration/simulation/simulation.go @@ -202,7 +202,7 @@ func (s *Simulation) trackLogs() { hocFilter := ethereum.FilterQuery{ Addresses: []gethcommon.Address{gethcommon.HexToAddress("0x" + testcommon.HOCAddr)}, } - sub, err := client.SubscribeFilterLogs(context.Background(), hocFilter, channel) + sub, err := client.SubscribeFilterLogsTEN(context.Background(), hocFilter, channel) if err != nil { panic(fmt.Errorf("subscription failed. Cause: %w", err)) } From 7cb6847b130d7bb23dde87e90b27486aa16892a3 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 7 Oct 2024 15:12:36 +0300 Subject: [PATCH 14/23] Fix for subscriptions. --- go/common/log_events.go | 2 +- go/obsclient/authclient.go | 2 +- integration/simulation/simulation.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go/common/log_events.go b/go/common/log_events.go index 57250bffe4..fada9cde0f 100644 --- a/go/common/log_events.go +++ b/go/common/log_events.go @@ -39,7 +39,7 @@ func CreateAuthenticatedLogSubscriptionPayload(args []interface{}, vk *viewingke return logSubscription, nil } - filterCriteria, ok := args[1].(ethereum.FilterQuery) + filterCriteria, ok := args[1].(FilterCriteria) if !ok { return nil, fmt.Errorf("invalid subscription") } diff --git a/go/obsclient/authclient.go b/go/obsclient/authclient.go index 9014f92d61..1e9fb57eb7 100644 --- a/go/obsclient/authclient.go +++ b/go/obsclient/authclient.go @@ -199,7 +199,7 @@ func (ac *AuthObsClient) SubscribeFilterLogs(ctx context.Context, filterCriteria } // Real method that we have used in TEN for subscription -func (ac *AuthObsClient) SubscribeFilterLogsTEN(ctx context.Context, filterCriteria ethereum.FilterQuery, ch chan types.Log) (ethereum.Subscription, error) { +func (ac *AuthObsClient) SubscribeFilterLogsTEN(ctx context.Context, filterCriteria common.FilterCriteria, ch chan types.Log) (ethereum.Subscription, error) { return ac.rpcClient.Subscribe(ctx, rpc.SubscribeNamespace, ch, rpc.SubscriptionTypeLogs, filterCriteria) } diff --git a/integration/simulation/simulation.go b/integration/simulation/simulation.go index e15e10cf44..b773079ae7 100644 --- a/integration/simulation/simulation.go +++ b/integration/simulation/simulation.go @@ -199,7 +199,7 @@ func (s *Simulation) trackLogs() { channel := make(chan types.Log, 1000) // To exercise the filtering mechanism, we subscribe for HOC events only, ignoring POC events. - hocFilter := ethereum.FilterQuery{ + hocFilter := common.FilterCriteria{ Addresses: []gethcommon.Address{gethcommon.HexToAddress("0x" + testcommon.HOCAddr)}, } sub, err := client.SubscribeFilterLogsTEN(context.Background(), hocFilter, channel) From 62c9f725e67bb9d89c3f42df39c3b2f003bd2382 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 7 Oct 2024 15:24:54 +0300 Subject: [PATCH 15/23] Fix for linter. --- go/common/log_events.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/common/log_events.go b/go/common/log_events.go index fada9cde0f..0db83be12f 100644 --- a/go/common/log_events.go +++ b/go/common/log_events.go @@ -43,7 +43,7 @@ func CreateAuthenticatedLogSubscriptionPayload(args []interface{}, vk *viewingke if !ok { return nil, fmt.Errorf("invalid subscription") } - fc := SerializableFilterCriteria(FilterCriteria(filterCriteria)) + fc := SerializableFilterCriteria(filterCriteria) logSubscription.Filter = &fc return logSubscription, nil } From ef368c53e922c3a0c1ba5f798f675adea5a15a71 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 7 Oct 2024 19:44:15 +0300 Subject: [PATCH 16/23] Renamed file. --- contracts/generated/ERC20/ERC20.go | 802 ---------- contracts/generated/Structs/Structs.go | 250 ---- .../SystemDeployer/SystemDeployer.go | 2 +- .../TransactionDecoder/TransactionDecoder.go | 252 ---- .../TransactionPostProcessor.go} | 517 +++---- contracts/generated/ZenBase/ZenBase.go | 21 +- contracts/src/system/SystemDeployer.sol | 4 +- contracts/src/system/Transaction.sol | 3 +- ...lyzer.sol => TransactionPostProcessor.sol} | 2 +- contracts/src/zen/ZenBase.sol | 6 +- go/common/enclave.go | 4 +- go/common/query_types.go | 12 +- go/common/rpc/generated/enclave.pb.go | 1301 +++++++++-------- go/common/rpc/generated/enclave.proto | 2 +- go/enclave/enclave.go | 6 +- go/enclave/nodetype/sequencer.go | 2 +- go/enclave/rpc_server.go | 4 +- go/enclave/system/hooks.go | 16 +- go/host/host.go | 18 +- go/host/rpc/clientapi/client_api_ten.go | 24 +- go/host/rpc/enclaverpc/enclave_client.go | 4 +- .../simulation/p2p/in_mem_obscuro_client.go | 12 +- integration/simulation/simulation.go | 6 +- 23 files changed, 985 insertions(+), 2285 deletions(-) delete mode 100644 contracts/generated/ERC20/ERC20.go delete mode 100644 contracts/generated/Structs/Structs.go delete mode 100644 contracts/generated/TransactionDecoder/TransactionDecoder.go rename contracts/generated/{TransactionsAnalyzer/TransactionsAnalyzer.go => TransactionPostProcessor/TransactionPostProcessor.go} (54%) rename contracts/src/system/{TransactionsAnalyzer.sol => TransactionPostProcessor.sol} (96%) diff --git a/contracts/generated/ERC20/ERC20.go b/contracts/generated/ERC20/ERC20.go deleted file mode 100644 index 095732a19b..0000000000 --- a/contracts/generated/ERC20/ERC20.go +++ /dev/null @@ -1,802 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package ERC20 - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// ERC20MetaData contains all meta data concerning the ERC20 contract. -var ERC20MetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162000c1538038062000c158339810160408190526200003491620001db565b81516200004990600390602085019062000068565b5080516200005f90600490602084019062000068565b50505062000282565b828054620000769062000245565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013657600080fd5b81516001600160401b03808211156200015357620001536200010e565b604051601f8301601f19908116603f011681019082821181831017156200017e576200017e6200010e565b816040528381526020925086838588010111156200019b57600080fd5b600091505b83821015620001bf5785820183015181830184015290820190620001a0565b83821115620001d15760008385830101525b9695505050505050565b60008060408385031215620001ef57600080fd5b82516001600160401b03808211156200020757600080fd5b620002158683870162000124565b935060208501519150808211156200022c57600080fd5b506200023b8582860162000124565b9150509250929050565b600181811c908216806200025a57607f821691505b602082108114156200027c57634e487b7160e01b600052602260045260246000fd5b50919050565b61098380620002926000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610187578063a9059cbb1461019a578063dd62ed3e146101ad57600080fd5b8063395093511461014357806370a082311461015657806395d89b411461017f57600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d66101e6565b6040516100e391906107c0565b60405180910390f35b6100ff6100fa366004610831565b610278565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f36600461085b565b610290565b604051601281526020016100e3565b6100ff610151366004610831565b6102b4565b610113610164366004610897565b6001600160a01b031660009081526020819052604090205490565b6100d66102f3565b6100ff610195366004610831565b610302565b6100ff6101a8366004610831565b6103b1565b6101136101bb3660046108b9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f5906108ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610221906108ec565b801561026e5780601f106102435761010080835404028352916020019161026e565b820191906000526020600020905b81548152906001019060200180831161025157829003601f168201915b5050505050905090565b6000336102868185856103bf565b5060019392505050565b60003361029e858285610517565b6102a98585856105a9565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061028690829086906102ee908790610927565b6103bf565b6060600480546101f5906108ec565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156103a45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102a982868684036103bf565b6000336102868185856105a9565b6001600160a01b03831661043a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161039b565b6001600160a01b0382166104b65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161039b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105a357818110156105965760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161039b565b6105a384848484036103bf565b50505050565b6001600160a01b0383166106255760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161039b565b6001600160a01b0382166106a15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161039b565b6001600160a01b038316600090815260208190526040902054818110156107305760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161039b565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610767908490610927565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107b391815260200190565b60405180910390a36105a3565b600060208083528351808285015260005b818110156107ed578581018301518582016040015282016107d1565b818111156107ff576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461082c57600080fd5b919050565b6000806040838503121561084457600080fd5b61084d83610815565b946020939093013593505050565b60008060006060848603121561087057600080fd5b61087984610815565b925061088760208501610815565b9150604084013590509250925092565b6000602082840312156108a957600080fd5b6108b282610815565b9392505050565b600080604083850312156108cc57600080fd5b6108d583610815565b91506108e360208401610815565b90509250929050565b600181811c9082168061090057607f821691505b6020821081141561092157634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561094857634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220d4f2b05455e1b6fd0f8db11431295bd6b508b32262e8d53212251945c8096cb464736f6c63430008090033", -} - -// ERC20ABI is the input ABI used to generate the binding from. -// Deprecated: Use ERC20MetaData.ABI instead. -var ERC20ABI = ERC20MetaData.ABI - -// ERC20Bin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ERC20MetaData.Bin instead. -var ERC20Bin = ERC20MetaData.Bin - -// DeployERC20 deploys a new Ethereum contract, binding an instance of ERC20 to it. -func DeployERC20(auth *bind.TransactOpts, backend bind.ContractBackend, name_ string, symbol_ string) (common.Address, *types.Transaction, *ERC20, error) { - parsed, err := ERC20MetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20Bin), backend, name_, symbol_) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ERC20{ERC20Caller: ERC20Caller{contract: contract}, ERC20Transactor: ERC20Transactor{contract: contract}, ERC20Filterer: ERC20Filterer{contract: contract}}, nil -} - -// ERC20 is an auto generated Go binding around an Ethereum contract. -type ERC20 struct { - ERC20Caller // Read-only binding to the contract - ERC20Transactor // Write-only binding to the contract - ERC20Filterer // Log filterer for contract events -} - -// ERC20Caller is an auto generated read-only Go binding around an Ethereum contract. -type ERC20Caller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ERC20Transactor is an auto generated write-only Go binding around an Ethereum contract. -type ERC20Transactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ERC20Filterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ERC20Filterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ERC20Session is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ERC20Session struct { - Contract *ERC20 // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ERC20CallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ERC20CallerSession struct { - Contract *ERC20Caller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ERC20TransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ERC20TransactorSession struct { - Contract *ERC20Transactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ERC20Raw is an auto generated low-level Go binding around an Ethereum contract. -type ERC20Raw struct { - Contract *ERC20 // Generic contract binding to access the raw methods on -} - -// ERC20CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ERC20CallerRaw struct { - Contract *ERC20Caller // Generic read-only contract binding to access the raw methods on -} - -// ERC20TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ERC20TransactorRaw struct { - Contract *ERC20Transactor // Generic write-only contract binding to access the raw methods on -} - -// NewERC20 creates a new instance of ERC20, bound to a specific deployed contract. -func NewERC20(address common.Address, backend bind.ContractBackend) (*ERC20, error) { - contract, err := bindERC20(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ERC20{ERC20Caller: ERC20Caller{contract: contract}, ERC20Transactor: ERC20Transactor{contract: contract}, ERC20Filterer: ERC20Filterer{contract: contract}}, nil -} - -// NewERC20Caller creates a new read-only instance of ERC20, bound to a specific deployed contract. -func NewERC20Caller(address common.Address, caller bind.ContractCaller) (*ERC20Caller, error) { - contract, err := bindERC20(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ERC20Caller{contract: contract}, nil -} - -// NewERC20Transactor creates a new write-only instance of ERC20, bound to a specific deployed contract. -func NewERC20Transactor(address common.Address, transactor bind.ContractTransactor) (*ERC20Transactor, error) { - contract, err := bindERC20(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ERC20Transactor{contract: contract}, nil -} - -// NewERC20Filterer creates a new log filterer instance of ERC20, bound to a specific deployed contract. -func NewERC20Filterer(address common.Address, filterer bind.ContractFilterer) (*ERC20Filterer, error) { - contract, err := bindERC20(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ERC20Filterer{contract: contract}, nil -} - -// bindERC20 binds a generic wrapper to an already deployed contract. -func bindERC20(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ERC20MetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ERC20 *ERC20Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ERC20.Contract.ERC20Caller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ERC20 *ERC20Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ERC20.Contract.ERC20Transactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ERC20 *ERC20Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ERC20.Contract.ERC20Transactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ERC20 *ERC20CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ERC20.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ERC20 *ERC20TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ERC20.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ERC20 *ERC20TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ERC20.Contract.contract.Transact(opts, method, params...) -} - -// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. -// -// Solidity: function allowance(address owner, address spender) view returns(uint256) -func (_ERC20 *ERC20Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { - var out []interface{} - err := _ERC20.contract.Call(opts, &out, "allowance", owner, spender) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. -// -// Solidity: function allowance(address owner, address spender) view returns(uint256) -func (_ERC20 *ERC20Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { - return _ERC20.Contract.Allowance(&_ERC20.CallOpts, owner, spender) -} - -// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. -// -// Solidity: function allowance(address owner, address spender) view returns(uint256) -func (_ERC20 *ERC20CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { - return _ERC20.Contract.Allowance(&_ERC20.CallOpts, owner, spender) -} - -// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. -// -// Solidity: function balanceOf(address account) view returns(uint256) -func (_ERC20 *ERC20Caller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { - var out []interface{} - err := _ERC20.contract.Call(opts, &out, "balanceOf", account) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. -// -// Solidity: function balanceOf(address account) view returns(uint256) -func (_ERC20 *ERC20Session) BalanceOf(account common.Address) (*big.Int, error) { - return _ERC20.Contract.BalanceOf(&_ERC20.CallOpts, account) -} - -// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. -// -// Solidity: function balanceOf(address account) view returns(uint256) -func (_ERC20 *ERC20CallerSession) BalanceOf(account common.Address) (*big.Int, error) { - return _ERC20.Contract.BalanceOf(&_ERC20.CallOpts, account) -} - -// Decimals is a free data retrieval call binding the contract method 0x313ce567. -// -// Solidity: function decimals() view returns(uint8) -func (_ERC20 *ERC20Caller) Decimals(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _ERC20.contract.Call(opts, &out, "decimals") - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// Decimals is a free data retrieval call binding the contract method 0x313ce567. -// -// Solidity: function decimals() view returns(uint8) -func (_ERC20 *ERC20Session) Decimals() (uint8, error) { - return _ERC20.Contract.Decimals(&_ERC20.CallOpts) -} - -// Decimals is a free data retrieval call binding the contract method 0x313ce567. -// -// Solidity: function decimals() view returns(uint8) -func (_ERC20 *ERC20CallerSession) Decimals() (uint8, error) { - return _ERC20.Contract.Decimals(&_ERC20.CallOpts) -} - -// Name is a free data retrieval call binding the contract method 0x06fdde03. -// -// Solidity: function name() view returns(string) -func (_ERC20 *ERC20Caller) Name(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _ERC20.contract.Call(opts, &out, "name") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Name is a free data retrieval call binding the contract method 0x06fdde03. -// -// Solidity: function name() view returns(string) -func (_ERC20 *ERC20Session) Name() (string, error) { - return _ERC20.Contract.Name(&_ERC20.CallOpts) -} - -// Name is a free data retrieval call binding the contract method 0x06fdde03. -// -// Solidity: function name() view returns(string) -func (_ERC20 *ERC20CallerSession) Name() (string, error) { - return _ERC20.Contract.Name(&_ERC20.CallOpts) -} - -// Symbol is a free data retrieval call binding the contract method 0x95d89b41. -// -// Solidity: function symbol() view returns(string) -func (_ERC20 *ERC20Caller) Symbol(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _ERC20.contract.Call(opts, &out, "symbol") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Symbol is a free data retrieval call binding the contract method 0x95d89b41. -// -// Solidity: function symbol() view returns(string) -func (_ERC20 *ERC20Session) Symbol() (string, error) { - return _ERC20.Contract.Symbol(&_ERC20.CallOpts) -} - -// Symbol is a free data retrieval call binding the contract method 0x95d89b41. -// -// Solidity: function symbol() view returns(string) -func (_ERC20 *ERC20CallerSession) Symbol() (string, error) { - return _ERC20.Contract.Symbol(&_ERC20.CallOpts) -} - -// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. -// -// Solidity: function totalSupply() view returns(uint256) -func (_ERC20 *ERC20Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _ERC20.contract.Call(opts, &out, "totalSupply") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. -// -// Solidity: function totalSupply() view returns(uint256) -func (_ERC20 *ERC20Session) TotalSupply() (*big.Int, error) { - return _ERC20.Contract.TotalSupply(&_ERC20.CallOpts) -} - -// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. -// -// Solidity: function totalSupply() view returns(uint256) -func (_ERC20 *ERC20CallerSession) TotalSupply() (*big.Int, error) { - return _ERC20.Contract.TotalSupply(&_ERC20.CallOpts) -} - -// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. -// -// Solidity: function approve(address spender, uint256 amount) returns(bool) -func (_ERC20 *ERC20Transactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { - return _ERC20.contract.Transact(opts, "approve", spender, amount) -} - -// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. -// -// Solidity: function approve(address spender, uint256 amount) returns(bool) -func (_ERC20 *ERC20Session) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { - return _ERC20.Contract.Approve(&_ERC20.TransactOpts, spender, amount) -} - -// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. -// -// Solidity: function approve(address spender, uint256 amount) returns(bool) -func (_ERC20 *ERC20TransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { - return _ERC20.Contract.Approve(&_ERC20.TransactOpts, spender, amount) -} - -// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. -// -// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) -func (_ERC20 *ERC20Transactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { - return _ERC20.contract.Transact(opts, "decreaseAllowance", spender, subtractedValue) -} - -// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. -// -// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) -func (_ERC20 *ERC20Session) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { - return _ERC20.Contract.DecreaseAllowance(&_ERC20.TransactOpts, spender, subtractedValue) -} - -// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. -// -// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) -func (_ERC20 *ERC20TransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { - return _ERC20.Contract.DecreaseAllowance(&_ERC20.TransactOpts, spender, subtractedValue) -} - -// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. -// -// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) -func (_ERC20 *ERC20Transactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _ERC20.contract.Transact(opts, "increaseAllowance", spender, addedValue) -} - -// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. -// -// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) -func (_ERC20 *ERC20Session) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _ERC20.Contract.IncreaseAllowance(&_ERC20.TransactOpts, spender, addedValue) -} - -// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. -// -// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) -func (_ERC20 *ERC20TransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _ERC20.Contract.IncreaseAllowance(&_ERC20.TransactOpts, spender, addedValue) -} - -// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. -// -// Solidity: function transfer(address to, uint256 amount) returns(bool) -func (_ERC20 *ERC20Transactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ERC20.contract.Transact(opts, "transfer", to, amount) -} - -// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. -// -// Solidity: function transfer(address to, uint256 amount) returns(bool) -func (_ERC20 *ERC20Session) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ERC20.Contract.Transfer(&_ERC20.TransactOpts, to, amount) -} - -// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. -// -// Solidity: function transfer(address to, uint256 amount) returns(bool) -func (_ERC20 *ERC20TransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ERC20.Contract.Transfer(&_ERC20.TransactOpts, to, amount) -} - -// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. -// -// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) -func (_ERC20 *ERC20Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ERC20.contract.Transact(opts, "transferFrom", from, to, amount) -} - -// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. -// -// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) -func (_ERC20 *ERC20Session) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ERC20.Contract.TransferFrom(&_ERC20.TransactOpts, from, to, amount) -} - -// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. -// -// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) -func (_ERC20 *ERC20TransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ERC20.Contract.TransferFrom(&_ERC20.TransactOpts, from, to, amount) -} - -// ERC20ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ERC20 contract. -type ERC20ApprovalIterator struct { - Event *ERC20Approval // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ERC20ApprovalIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ERC20Approval) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ERC20Approval) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20ApprovalIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20ApprovalIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20Approval represents a Approval event raised by the ERC20 contract. -type ERC20Approval struct { - Owner common.Address - Spender common.Address - Value *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. -// -// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) -func (_ERC20 *ERC20Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*ERC20ApprovalIterator, error) { - - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - var spenderRule []interface{} - for _, spenderItem := range spender { - spenderRule = append(spenderRule, spenderItem) - } - - logs, sub, err := _ERC20.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) - if err != nil { - return nil, err - } - return &ERC20ApprovalIterator{contract: _ERC20.contract, event: "Approval", logs: logs, sub: sub}, nil -} - -// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. -// -// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) -func (_ERC20 *ERC20Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC20Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) { - - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - var spenderRule []interface{} - for _, spenderItem := range spender { - spenderRule = append(spenderRule, spenderItem) - } - - logs, sub, err := _ERC20.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ERC20Approval) - if err := _ERC20.contract.UnpackLog(event, "Approval", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. -// -// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) -func (_ERC20 *ERC20Filterer) ParseApproval(log types.Log) (*ERC20Approval, error) { - event := new(ERC20Approval) - if err := _ERC20.contract.UnpackLog(event, "Approval", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ERC20TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ERC20 contract. -type ERC20TransferIterator struct { - Event *ERC20Transfer // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ERC20TransferIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ERC20Transfer) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ERC20Transfer) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TransferIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20TransferIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20Transfer represents a Transfer event raised by the ERC20 contract. -type ERC20Transfer struct { - From common.Address - To common.Address - Value *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. -// -// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) -func (_ERC20 *ERC20Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ERC20TransferIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _ERC20.contract.FilterLogs(opts, "Transfer", fromRule, toRule) - if err != nil { - return nil, err - } - return &ERC20TransferIterator{contract: _ERC20.contract, event: "Transfer", logs: logs, sub: sub}, nil -} - -// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. -// -// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) -func (_ERC20 *ERC20Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC20Transfer, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _ERC20.contract.WatchLogs(opts, "Transfer", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ERC20Transfer) - if err := _ERC20.contract.UnpackLog(event, "Transfer", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. -// -// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) -func (_ERC20 *ERC20Filterer) ParseTransfer(log types.Log) (*ERC20Transfer, error) { - event := new(ERC20Transfer) - if err := _ERC20.contract.UnpackLog(event, "Transfer", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/contracts/generated/Structs/Structs.go b/contracts/generated/Structs/Structs.go deleted file mode 100644 index cc43501e3b..0000000000 --- a/contracts/generated/Structs/Structs.go +++ /dev/null @@ -1,250 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package Structs - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// StructsTransaction is an auto generated low-level Go binding around an user-defined struct. -type StructsTransaction struct { - TxType uint8 - Nonce *big.Int - GasPrice *big.Int - GasLimit *big.Int - To common.Address - Value *big.Int - Data []byte - V uint8 - R [32]byte - S [32]byte - MaxPriorityFeePerGas *big.Int - MaxFeePerGas *big.Int -} - -// StructsMetaData contains all meta data concerning the Structs contract. -var StructsMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.Transaction\",\"name\":\"txData\",\"type\":\"tuple\"}],\"name\":\"recoverSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x60806040523461001e576040516105e56100248239308150506105e590f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c638314c06f0361003657610085565b90816101809103126100365790565b600080fd5b9060208282031261003657813567ffffffffffffffff8111610036576100619201610027565b90565b6001600160a01b031690565b6001600160a01b03909116815260200190565b565b6100a761009b61009636600461003b565b610212565b60405191829182610070565b0390f35b60ff81165b0361003657565b35610061816100ab565b806100b0565b35610061816100c1565b6001600160a01b0381166100b0565b35610061816100d1565b903590601e193682900301821215610036570180359067ffffffffffffffff8211610036576020019136829003831361003657565b90826000939282370152565b919061014981610142816101539560209181520190565b809561011f565b601f01601f191690565b0190565b956101c0906101b961019e976101a96100839d9f9e9c96986101a26101009d979960408e61019e6101cd9e61019761012084019f600085019060ff169052565b6020830152565b0152565b60608c0152565b6001600160a01b031660808a0152565b60a0880152565b85830360c087015261012b565b9660e0830152565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761020d57604052565b6101d5565b610061906102f7610222826100b7565b6102b5610231602085016100c7565b61023d604086016100c7565b926102a961024d606088016100c7565b8761025a608082016100e0565b61026660a083016100c7565b9061027460c08401846100ea565b92909161029161016061028a61014088016100c7565b96016100c7565b9561029b60405190565b9b8c9a60208c019a8b610157565b908103825203826101eb565b6102c76102c0825190565b9160200190565b207f19457468657265756d205369676e6564204d6573736167653a0a333200000000600052601c52603c60002090565b9061030460e082016100b7565b61031e61012061031761010085016100c7565b93016100c7565b6100619361032e9391929061039f565b90929192610497565b6100616100616100619290565b61006190610337565b6100646100616100619290565b6100619061034d565b61019e6100839461038c606094989795610382608086019a6000870152565b60ff166020850152565b6040830152565b6040513d6000823e3d90fd5b90916103aa84610344565b6103da6103d67f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0610337565b9190565b1161045457906103fc602094600094936103f360405190565b94859485610363565b838052039060015afa1561044f576000516000916104198361035a565b6001600160a01b0381166001600160a01b03841614610442575061043c83610337565b91929190565b915061043c600193610337565b610393565b505050610461600061035a565b9160039190565b634e487b7160e01b600052602160045260246000fd5b6004111561048857565b610468565b906100838261047e565b6104a1600061048d565b6104aa8261048d565b036104b3575050565b6104bd600161048d565b6104c68261048d565b036104fa576040517ff645eedf000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b610504600261048d565b61050d8261048d565b03610554576104f661051e83610344565b6040519182917ffce698f70000000000000000000000000000000000000000000000000000000083526004830190815260200190565b610567610561600361048d565b9161048d565b1461056f5750565b6104f69061057c60405190565b9182917fd78bce0c000000000000000000000000000000000000000000000000000000008352600483019081526020019056fea264697066735822122094db7b9a0a1dbf0c452203de6f7e97cba3e05fc1def5e3ae5efbdebc932f7da564736f6c63430008140033", -} - -// StructsABI is the input ABI used to generate the binding from. -// Deprecated: Use StructsMetaData.ABI instead. -var StructsABI = StructsMetaData.ABI - -// StructsBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use StructsMetaData.Bin instead. -var StructsBin = StructsMetaData.Bin - -// DeployStructs deploys a new Ethereum contract, binding an instance of Structs to it. -func DeployStructs(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Structs, error) { - parsed, err := StructsMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StructsBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &Structs{StructsCaller: StructsCaller{contract: contract}, StructsTransactor: StructsTransactor{contract: contract}, StructsFilterer: StructsFilterer{contract: contract}}, nil -} - -// Structs is an auto generated Go binding around an Ethereum contract. -type Structs struct { - StructsCaller // Read-only binding to the contract - StructsTransactor // Write-only binding to the contract - StructsFilterer // Log filterer for contract events -} - -// StructsCaller is an auto generated read-only Go binding around an Ethereum contract. -type StructsCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StructsTransactor is an auto generated write-only Go binding around an Ethereum contract. -type StructsTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StructsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type StructsFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StructsSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type StructsSession struct { - Contract *Structs // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StructsCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type StructsCallerSession struct { - Contract *StructsCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// StructsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type StructsTransactorSession struct { - Contract *StructsTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StructsRaw is an auto generated low-level Go binding around an Ethereum contract. -type StructsRaw struct { - Contract *Structs // Generic contract binding to access the raw methods on -} - -// StructsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type StructsCallerRaw struct { - Contract *StructsCaller // Generic read-only contract binding to access the raw methods on -} - -// StructsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type StructsTransactorRaw struct { - Contract *StructsTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewStructs creates a new instance of Structs, bound to a specific deployed contract. -func NewStructs(address common.Address, backend bind.ContractBackend) (*Structs, error) { - contract, err := bindStructs(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Structs{StructsCaller: StructsCaller{contract: contract}, StructsTransactor: StructsTransactor{contract: contract}, StructsFilterer: StructsFilterer{contract: contract}}, nil -} - -// NewStructsCaller creates a new read-only instance of Structs, bound to a specific deployed contract. -func NewStructsCaller(address common.Address, caller bind.ContractCaller) (*StructsCaller, error) { - contract, err := bindStructs(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &StructsCaller{contract: contract}, nil -} - -// NewStructsTransactor creates a new write-only instance of Structs, bound to a specific deployed contract. -func NewStructsTransactor(address common.Address, transactor bind.ContractTransactor) (*StructsTransactor, error) { - contract, err := bindStructs(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &StructsTransactor{contract: contract}, nil -} - -// NewStructsFilterer creates a new log filterer instance of Structs, bound to a specific deployed contract. -func NewStructsFilterer(address common.Address, filterer bind.ContractFilterer) (*StructsFilterer, error) { - contract, err := bindStructs(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &StructsFilterer{contract: contract}, nil -} - -// bindStructs binds a generic wrapper to an already deployed contract. -func bindStructs(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := StructsMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Structs *StructsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Structs.Contract.StructsCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Structs *StructsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Structs.Contract.StructsTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Structs *StructsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Structs.Contract.StructsTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Structs *StructsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Structs.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Structs *StructsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Structs.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Structs *StructsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Structs.Contract.contract.Transact(opts, method, params...) -} - -// RecoverSender is a free data retrieval call binding the contract method 0x0cb57856. -// -// Solidity: function recoverSender((uint8,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256) txData) pure returns(address sender) -func (_Structs *StructsCaller) RecoverSender(opts *bind.CallOpts, txData StructsTransaction) (common.Address, error) { - var out []interface{} - err := _Structs.contract.Call(opts, &out, "recoverSender", txData) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// RecoverSender is a free data retrieval call binding the contract method 0x0cb57856. -// -// Solidity: function recoverSender((uint8,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256) txData) pure returns(address sender) -func (_Structs *StructsSession) RecoverSender(txData StructsTransaction) (common.Address, error) { - return _Structs.Contract.RecoverSender(&_Structs.CallOpts, txData) -} - -// RecoverSender is a free data retrieval call binding the contract method 0x0cb57856. -// -// Solidity: function recoverSender((uint8,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256) txData) pure returns(address sender) -func (_Structs *StructsCallerSession) RecoverSender(txData StructsTransaction) (common.Address, error) { - return _Structs.Contract.RecoverSender(&_Structs.CallOpts, txData) -} diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 36d04012b1..633baf42b5 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x60806040523480156200001157600080fd5b50604051620024a9380380620024a98339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610e28806200035583390190565b61132c806200117d83390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601481527f5472616e73616374696f6e73416e616c797a6572000000000000000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea2646970667358221220ff9df1e4c29f3a37150345a049596501d6997b1caf7da1bb6cb030b1eeed4a7f64736f6c63430008140033608060405234801561001057600080fd5b50610e08806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063d547741f1161005b578063d547741f146101fa578063dfc6cc361461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806391d14854146101bb578063a217fddf146101f257600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101c9366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b610145610208366004610952565b610548565b61014561021b366004610a03565b61056d565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b600082815260208190526040902060010154610563816106d0565b6103558383610787565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610597816106d0565b60008290036105db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d290610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061060b90849061091f565b60405180910390a160005b6001548110156103555760006001828154811061063557610635610ad0565b6000918252602090912001546040517fd43827cb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063d43827cb9061068c9088908890600401610d76565b600060405180830381600087803b1580156106a657600080fd5b505af11580156106ba573d6000803e3d6000fd5b5050505050806106c990610d9e565b9050610616565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105d2929190610db7565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b60006101208301610bed8380610afa565b610bf78582610b0a565b50610c056020840184610b13565b610c126020860182610919565b50610c206040840184610b13565b610c2d6040860182610919565b50610c3b6060840184610b13565b610c486060860182610919565b50610c566080840184610b23565b610c636080860182610b33565b50610c7160a0840184610b13565b610c7e60a0860182610919565b50610c8c60c0840184610b3c565b85830360c0870152610c9f838284610b99565b92505050610cb060e0840184610b23565b610cbd60e0860182610b33565b50610ccc610100840184610bcc565b610cda6101008601826108cf565b509392505050565b6000610cee8383610bdc565b9392505050565b6000823561011e1936849003018112610d1057610d10600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d69578484038952610d478284610cf5565b610d518582610ce2565b94505060208201602099909901989150600101610d30565b5091979650505050505050565b602080825281016108c7818486610d19565b634e487b7160e01b600052601160045260246000fd5b600060018201610db057610db0610d88565b5060010190565b60408101610dc58285610b33565b610cee602083018461091956fea2646970667358221220735d7f7f76e88e4e593c9d0b792373fd020ef0f687d35555e63a4c6ea0dfccee64736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + Bin: "0x60806040523480156200001157600080fd5b50604051620024c6380380620024c68339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610e45806200035583390190565b61132c806200119a83390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601481527f5472616e73616374696f6e73416e616c797a6572000000000000000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea2646970667358221220555ec0015bfb515c94113040b19656e016ae167e7be92dd3381ec194c9b6453d64736f6c63430008140033608060405234801561001057600080fd5b50610e25806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063a440c3141161005b578063a440c314146101fa578063d547741f1461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806391d14854146101bb578063a217fddf146101f257600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101c9366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b610145610208366004610a03565b610548565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517f516c75100000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063516c7510906106679088908890600401610d93565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610dbb565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610dd4565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b60006101408301610bed8380610afa565b610bf78582610b0a565b50610c056020840184610b13565b610c126020860182610919565b50610c206040840184610b13565b610c2d6040860182610919565b50610c3b6060840184610b13565b610c486060860182610919565b50610c566080840184610b23565b610c636080860182610b33565b50610c7160a0840184610b13565b610c7e60a0860182610919565b50610c8c60c0840184610b3c565b85830360c0870152610c9f838284610b99565b92505050610cb060e0840184610b23565b610cbd60e0860182610b33565b50610ccc610100840184610bcc565b610cda6101008601826108cf565b50610ce9610120840184610b13565b610cf7610120860182610919565b509392505050565b6000610d0b8383610bdc565b9392505050565b6000823561013e1936849003018112610d2d57610d2d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d86578484038952610d648284610d12565b610d6e8582610cff565b94505060208201602099909901989150600101610d4d565b5091979650505050505050565b602080825281016108c7818486610d36565b634e487b7160e01b600052601160045260246000fd5b600060018201610dcd57610dcd610da5565b5060010190565b60408101610de28285610b33565b610d0b602083018461091956fea26469706673582212204a4b8ebd370b53bec98019d9bdbc05cc05f4ad0a9208d42fdfd85132ba97536664736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/TransactionDecoder/TransactionDecoder.go b/contracts/generated/TransactionDecoder/TransactionDecoder.go deleted file mode 100644 index c815983c71..0000000000 --- a/contracts/generated/TransactionDecoder/TransactionDecoder.go +++ /dev/null @@ -1,252 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package TransactionDecoder - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// TransactionDecoderTransaction is an auto generated low-level Go binding around an user-defined struct. -type TransactionDecoderTransaction struct { - TxType uint8 - ChainId *big.Int - Nonce *big.Int - GasPrice *big.Int - GasLimit *big.Int - To common.Address - Value *big.Int - Data []byte - V uint8 - R [32]byte - S [32]byte - MaxPriorityFeePerGas *big.Int - MaxFeePerGas *big.Int - AccessList []common.Address -} - -// TransactionDecoderMetaData contains all meta data concerning the TransactionDecoder contract. -var TransactionDecoderMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"accessList\",\"type\":\"address[]\"}],\"internalType\":\"structTransactionDecoder.Transaction\",\"name\":\"txData\",\"type\":\"tuple\"}],\"name\":\"recoverSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x60806040523461001e5760405161069e61002482393081505061069e90f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63fe7fbd180361003657610072565b90816101c09103126100365790565b600080fd5b9060208282031261003657813567ffffffffffffffff8111610036576100619201610027565b90565b6001600160a01b031690565b565b6100a261008861008336600461003b565b6102b6565b604051918291826001600160a01b03909116815260200190565b0390f35b60ff81165b0361003657565b35610061816100a6565b806100ab565b35610061816100bc565b6001600160a01b0381166100ab565b35610061816100cc565b903590601e193682900301821215610036570180359067ffffffffffffffff8211610036576020019136829003831361003657565b903590601e193682900301821215610036570180359067ffffffffffffffff82116100365760200191602082023603831361003657565b90826000939282370152565b919061017b81610174816101859560209181520190565b8095610151565b601f01601f191690565b0190565b90503590610070826100cc565b50610061906020810190610189565b818352602090920191906000825b8282106101c1575050505090565b909192936101f06101e96001926101d88886610196565b6001600160a01b0316815260200190565b9560200190565b939201906101b3565b999b9c9a9895939196949290966101608b019760008c0161021b9160ff169052565b60208b015260408a0152606089015260808801526001600160a01b031660a087015260c086015284820360e08601526102539261015d565b936101008301610261919052565b610120820152808303906101400152610061926101a5565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff8211176102b157604052565b610279565b6102bf816100b2565b6102cb602083016100c2565b6102d7604084016100c2565b906102e4606085016100c2565b926102f1608086016100c2565b6102fd60a087016100db565b9061030a60c088016100c2565b61031760e08901896100e5565b6103246101608b016100c2565b916103326101808c016100c2565b936103416101a08d018d61011a565b97909661034d60405190565b9c8d9c60208e019c61035f9c8e6101f9565b90810382520361036f908261028f565b805190602001206103a9907f19457468657265756d205369676e6564204d6573736167653a0a333200000000600052601c52603c60002090565b906103b761010082016100b2565b906103c561012082016100c2565b90610140016103d3906100c2565b6100619384936103e39391610458565b90929192610550565b6100616100616100619290565b610061906103ec565b6100646100616100619290565b61006190610402565b61044861007094610441606094989795610437608086019a6000870152565b60ff166020850152565b6040830152565b0152565b6040513d6000823e3d90fd5b9091610463846103f9565b61049361048f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a06103ec565b9190565b1161050d57906104b5602094600094936104ac60405190565b94859485610418565b838052039060015afa15610508576000516000916104d28361040f565b6001600160a01b0381166001600160a01b038416146104fb57506104f5836103ec565b91929190565b91506104f56001936103ec565b61044c565b50505061051a600061040f565b9160039190565b634e487b7160e01b600052602160045260246000fd5b6004111561054157565b610521565b9061007082610537565b61055a6000610546565b61056382610546565b0361056c575050565b6105766001610546565b61057f82610546565b036105b3576040517ff645eedf000000000000000000000000000000000000000000000000000000008152600490fd5b0390fd5b6105bd6002610546565b6105c682610546565b0361060d576105af6105d7836103f9565b6040519182917ffce698f70000000000000000000000000000000000000000000000000000000083526004830190815260200190565b61062061061a6003610546565b91610546565b146106285750565b6105af9061063560405190565b9182917fd78bce0c000000000000000000000000000000000000000000000000000000008352600483019081526020019056fea26469706673582212207685a34f7ab7c0720815e0d0c34b60bc2c846ea69d5859ef98002e1536e3525064736f6c63430008140033", -} - -// TransactionDecoderABI is the input ABI used to generate the binding from. -// Deprecated: Use TransactionDecoderMetaData.ABI instead. -var TransactionDecoderABI = TransactionDecoderMetaData.ABI - -// TransactionDecoderBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use TransactionDecoderMetaData.Bin instead. -var TransactionDecoderBin = TransactionDecoderMetaData.Bin - -// DeployTransactionDecoder deploys a new Ethereum contract, binding an instance of TransactionDecoder to it. -func DeployTransactionDecoder(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *TransactionDecoder, error) { - parsed, err := TransactionDecoderMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TransactionDecoderBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &TransactionDecoder{TransactionDecoderCaller: TransactionDecoderCaller{contract: contract}, TransactionDecoderTransactor: TransactionDecoderTransactor{contract: contract}, TransactionDecoderFilterer: TransactionDecoderFilterer{contract: contract}}, nil -} - -// TransactionDecoder is an auto generated Go binding around an Ethereum contract. -type TransactionDecoder struct { - TransactionDecoderCaller // Read-only binding to the contract - TransactionDecoderTransactor // Write-only binding to the contract - TransactionDecoderFilterer // Log filterer for contract events -} - -// TransactionDecoderCaller is an auto generated read-only Go binding around an Ethereum contract. -type TransactionDecoderCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// TransactionDecoderTransactor is an auto generated write-only Go binding around an Ethereum contract. -type TransactionDecoderTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// TransactionDecoderFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type TransactionDecoderFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// TransactionDecoderSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type TransactionDecoderSession struct { - Contract *TransactionDecoder // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// TransactionDecoderCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type TransactionDecoderCallerSession struct { - Contract *TransactionDecoderCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// TransactionDecoderTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type TransactionDecoderTransactorSession struct { - Contract *TransactionDecoderTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// TransactionDecoderRaw is an auto generated low-level Go binding around an Ethereum contract. -type TransactionDecoderRaw struct { - Contract *TransactionDecoder // Generic contract binding to access the raw methods on -} - -// TransactionDecoderCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type TransactionDecoderCallerRaw struct { - Contract *TransactionDecoderCaller // Generic read-only contract binding to access the raw methods on -} - -// TransactionDecoderTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type TransactionDecoderTransactorRaw struct { - Contract *TransactionDecoderTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewTransactionDecoder creates a new instance of TransactionDecoder, bound to a specific deployed contract. -func NewTransactionDecoder(address common.Address, backend bind.ContractBackend) (*TransactionDecoder, error) { - contract, err := bindTransactionDecoder(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &TransactionDecoder{TransactionDecoderCaller: TransactionDecoderCaller{contract: contract}, TransactionDecoderTransactor: TransactionDecoderTransactor{contract: contract}, TransactionDecoderFilterer: TransactionDecoderFilterer{contract: contract}}, nil -} - -// NewTransactionDecoderCaller creates a new read-only instance of TransactionDecoder, bound to a specific deployed contract. -func NewTransactionDecoderCaller(address common.Address, caller bind.ContractCaller) (*TransactionDecoderCaller, error) { - contract, err := bindTransactionDecoder(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &TransactionDecoderCaller{contract: contract}, nil -} - -// NewTransactionDecoderTransactor creates a new write-only instance of TransactionDecoder, bound to a specific deployed contract. -func NewTransactionDecoderTransactor(address common.Address, transactor bind.ContractTransactor) (*TransactionDecoderTransactor, error) { - contract, err := bindTransactionDecoder(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &TransactionDecoderTransactor{contract: contract}, nil -} - -// NewTransactionDecoderFilterer creates a new log filterer instance of TransactionDecoder, bound to a specific deployed contract. -func NewTransactionDecoderFilterer(address common.Address, filterer bind.ContractFilterer) (*TransactionDecoderFilterer, error) { - contract, err := bindTransactionDecoder(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &TransactionDecoderFilterer{contract: contract}, nil -} - -// bindTransactionDecoder binds a generic wrapper to an already deployed contract. -func bindTransactionDecoder(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := TransactionDecoderMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_TransactionDecoder *TransactionDecoderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _TransactionDecoder.Contract.TransactionDecoderCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_TransactionDecoder *TransactionDecoderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _TransactionDecoder.Contract.TransactionDecoderTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_TransactionDecoder *TransactionDecoderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _TransactionDecoder.Contract.TransactionDecoderTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_TransactionDecoder *TransactionDecoderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _TransactionDecoder.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_TransactionDecoder *TransactionDecoderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _TransactionDecoder.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_TransactionDecoder *TransactionDecoderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _TransactionDecoder.Contract.contract.Transact(opts, method, params...) -} - -// RecoverSender is a free data retrieval call binding the contract method 0x23bc02dd. -// -// Solidity: function recoverSender((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[]) txData) pure returns(address sender) -func (_TransactionDecoder *TransactionDecoderCaller) RecoverSender(opts *bind.CallOpts, txData TransactionDecoderTransaction) (common.Address, error) { - var out []interface{} - err := _TransactionDecoder.contract.Call(opts, &out, "recoverSender", txData) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// RecoverSender is a free data retrieval call binding the contract method 0x23bc02dd. -// -// Solidity: function recoverSender((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[]) txData) pure returns(address sender) -func (_TransactionDecoder *TransactionDecoderSession) RecoverSender(txData TransactionDecoderTransaction) (common.Address, error) { - return _TransactionDecoder.Contract.RecoverSender(&_TransactionDecoder.CallOpts, txData) -} - -// RecoverSender is a free data retrieval call binding the contract method 0x23bc02dd. -// -// Solidity: function recoverSender((uint8,uint256,uint256,uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32,uint256,uint256,address[]) txData) pure returns(address sender) -func (_TransactionDecoder *TransactionDecoderCallerSession) RecoverSender(txData TransactionDecoderTransaction) (common.Address, error) { - return _TransactionDecoder.Contract.RecoverSender(&_TransactionDecoder.CallOpts, txData) -} diff --git a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go b/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go similarity index 54% rename from contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go rename to contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go index f5e58fe14b..97b3718420 100644 --- a/contracts/generated/TransactionsAnalyzer/TransactionsAnalyzer.go +++ b/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go @@ -1,7 +1,7 @@ // Code generated - DO NOT EDIT. // This file is a generated binding and any manual changes will be lost. -package TransactionsAnalyzer +package TransactionPostProcessor import ( "errors" @@ -40,25 +40,26 @@ type StructsTransaction struct { Data []byte From common.Address Successful bool + GasUsed *big.Int } -// TransactionsAnalyzerMetaData contains all meta data concerning the TransactionsAnalyzer contract. -var TransactionsAnalyzerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionsLength\",\"type\":\"uint256\"}],\"name\":\"TransactionsConverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610e08806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063d547741f1161005b578063d547741f146101fa578063dfc6cc361461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806391d14854146101bb578063a217fddf146101f257600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101c9366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b610145610208366004610952565b610548565b61014561021b366004610a03565b61056d565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b600082815260208190526040902060010154610563816106d0565b6103558383610787565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610597816106d0565b60008290036105db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d290610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061060b90849061091f565b60405180910390a160005b6001548110156103555760006001828154811061063557610635610ad0565b6000918252602090912001546040517fd43827cb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063d43827cb9061068c9088908890600401610d76565b600060405180830381600087803b1580156106a657600080fd5b505af11580156106ba573d6000803e3d6000fd5b5050505050806106c990610d9e565b9050610616565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105d2929190610db7565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b60006101208301610bed8380610afa565b610bf78582610b0a565b50610c056020840184610b13565b610c126020860182610919565b50610c206040840184610b13565b610c2d6040860182610919565b50610c3b6060840184610b13565b610c486060860182610919565b50610c566080840184610b23565b610c636080860182610b33565b50610c7160a0840184610b13565b610c7e60a0860182610919565b50610c8c60c0840184610b3c565b85830360c0870152610c9f838284610b99565b92505050610cb060e0840184610b23565b610cbd60e0860182610b33565b50610ccc610100840184610bcc565b610cda6101008601826108cf565b509392505050565b6000610cee8383610bdc565b9392505050565b6000823561011e1936849003018112610d1057610d10600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d69578484038952610d478284610cf5565b610d518582610ce2565b94505060208201602099909901989150600101610d30565b5091979650505050505050565b602080825281016108c7818486610d19565b634e487b7160e01b600052601160045260246000fd5b600060018201610db057610db0610d88565b5060010190565b60408101610dc58285610b33565b610cee602083018461091956fea2646970667358221220735d7f7f76e88e4e593c9d0b792373fd020ef0f687d35555e63a4c6ea0dfccee64736f6c63430008140033", +// TransactionPostProcessorMetaData contains all meta data concerning the TransactionPostProcessor contract. +var TransactionPostProcessorMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionsLength\",\"type\":\"uint256\"}],\"name\":\"TransactionsConverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50610e25806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063a440c3141161005b578063a440c314146101fa578063d547741f1461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806391d14854146101bb578063a217fddf146101f257600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101c9366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b610145610208366004610a03565b610548565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517f516c75100000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063516c7510906106679088908890600401610d93565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610dbb565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610dd4565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b60006101408301610bed8380610afa565b610bf78582610b0a565b50610c056020840184610b13565b610c126020860182610919565b50610c206040840184610b13565b610c2d6040860182610919565b50610c3b6060840184610b13565b610c486060860182610919565b50610c566080840184610b23565b610c636080860182610b33565b50610c7160a0840184610b13565b610c7e60a0860182610919565b50610c8c60c0840184610b3c565b85830360c0870152610c9f838284610b99565b92505050610cb060e0840184610b23565b610cbd60e0860182610b33565b50610ccc610100840184610bcc565b610cda6101008601826108cf565b50610ce9610120840184610b13565b610cf7610120860182610919565b509392505050565b6000610d0b8383610bdc565b9392505050565b6000823561013e1936849003018112610d2d57610d2d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d86578484038952610d648284610d12565b610d6e8582610cff565b94505060208201602099909901989150600101610d4d565b5091979650505050505050565b602080825281016108c7818486610d36565b634e487b7160e01b600052601160045260246000fd5b600060018201610dcd57610dcd610da5565b5060010190565b60408101610de28285610b33565b610d0b602083018461091956fea26469706673582212204a4b8ebd370b53bec98019d9bdbc05cc05f4ad0a9208d42fdfd85132ba97536664736f6c63430008140033", } -// TransactionsAnalyzerABI is the input ABI used to generate the binding from. -// Deprecated: Use TransactionsAnalyzerMetaData.ABI instead. -var TransactionsAnalyzerABI = TransactionsAnalyzerMetaData.ABI +// TransactionPostProcessorABI is the input ABI used to generate the binding from. +// Deprecated: Use TransactionPostProcessorMetaData.ABI instead. +var TransactionPostProcessorABI = TransactionPostProcessorMetaData.ABI -// TransactionsAnalyzerBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use TransactionsAnalyzerMetaData.Bin instead. -var TransactionsAnalyzerBin = TransactionsAnalyzerMetaData.Bin +// TransactionPostProcessorBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use TransactionPostProcessorMetaData.Bin instead. +var TransactionPostProcessorBin = TransactionPostProcessorMetaData.Bin -// DeployTransactionsAnalyzer deploys a new Ethereum contract, binding an instance of TransactionsAnalyzer to it. -func DeployTransactionsAnalyzer(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *TransactionsAnalyzer, error) { - parsed, err := TransactionsAnalyzerMetaData.GetAbi() +// DeployTransactionPostProcessor deploys a new Ethereum contract, binding an instance of TransactionPostProcessor to it. +func DeployTransactionPostProcessor(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *TransactionPostProcessor, error) { + parsed, err := TransactionPostProcessorMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err } @@ -66,111 +67,111 @@ func DeployTransactionsAnalyzer(auth *bind.TransactOpts, backend bind.ContractBa return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TransactionsAnalyzerBin), backend) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TransactionPostProcessorBin), backend) if err != nil { return common.Address{}, nil, nil, err } - return address, tx, &TransactionsAnalyzer{TransactionsAnalyzerCaller: TransactionsAnalyzerCaller{contract: contract}, TransactionsAnalyzerTransactor: TransactionsAnalyzerTransactor{contract: contract}, TransactionsAnalyzerFilterer: TransactionsAnalyzerFilterer{contract: contract}}, nil + return address, tx, &TransactionPostProcessor{TransactionPostProcessorCaller: TransactionPostProcessorCaller{contract: contract}, TransactionPostProcessorTransactor: TransactionPostProcessorTransactor{contract: contract}, TransactionPostProcessorFilterer: TransactionPostProcessorFilterer{contract: contract}}, nil } -// TransactionsAnalyzer is an auto generated Go binding around an Ethereum contract. -type TransactionsAnalyzer struct { - TransactionsAnalyzerCaller // Read-only binding to the contract - TransactionsAnalyzerTransactor // Write-only binding to the contract - TransactionsAnalyzerFilterer // Log filterer for contract events +// TransactionPostProcessor is an auto generated Go binding around an Ethereum contract. +type TransactionPostProcessor struct { + TransactionPostProcessorCaller // Read-only binding to the contract + TransactionPostProcessorTransactor // Write-only binding to the contract + TransactionPostProcessorFilterer // Log filterer for contract events } -// TransactionsAnalyzerCaller is an auto generated read-only Go binding around an Ethereum contract. -type TransactionsAnalyzerCaller struct { +// TransactionPostProcessorCaller is an auto generated read-only Go binding around an Ethereum contract. +type TransactionPostProcessorCaller struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// TransactionsAnalyzerTransactor is an auto generated write-only Go binding around an Ethereum contract. -type TransactionsAnalyzerTransactor struct { +// TransactionPostProcessorTransactor is an auto generated write-only Go binding around an Ethereum contract. +type TransactionPostProcessorTransactor struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// TransactionsAnalyzerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type TransactionsAnalyzerFilterer struct { +// TransactionPostProcessorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type TransactionPostProcessorFilterer struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// TransactionsAnalyzerSession is an auto generated Go binding around an Ethereum contract, +// TransactionPostProcessorSession is an auto generated Go binding around an Ethereum contract, // with pre-set call and transact options. -type TransactionsAnalyzerSession struct { - Contract *TransactionsAnalyzer // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +type TransactionPostProcessorSession struct { + Contract *TransactionPostProcessor // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// TransactionsAnalyzerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// TransactionPostProcessorCallerSession is an auto generated read-only Go binding around an Ethereum contract, // with pre-set call options. -type TransactionsAnalyzerCallerSession struct { - Contract *TransactionsAnalyzerCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session +type TransactionPostProcessorCallerSession struct { + Contract *TransactionPostProcessorCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session } -// TransactionsAnalyzerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// TransactionPostProcessorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, // with pre-set transact options. -type TransactionsAnalyzerTransactorSession struct { - Contract *TransactionsAnalyzerTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +type TransactionPostProcessorTransactorSession struct { + Contract *TransactionPostProcessorTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// TransactionsAnalyzerRaw is an auto generated low-level Go binding around an Ethereum contract. -type TransactionsAnalyzerRaw struct { - Contract *TransactionsAnalyzer // Generic contract binding to access the raw methods on +// TransactionPostProcessorRaw is an auto generated low-level Go binding around an Ethereum contract. +type TransactionPostProcessorRaw struct { + Contract *TransactionPostProcessor // Generic contract binding to access the raw methods on } -// TransactionsAnalyzerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type TransactionsAnalyzerCallerRaw struct { - Contract *TransactionsAnalyzerCaller // Generic read-only contract binding to access the raw methods on +// TransactionPostProcessorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type TransactionPostProcessorCallerRaw struct { + Contract *TransactionPostProcessorCaller // Generic read-only contract binding to access the raw methods on } -// TransactionsAnalyzerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type TransactionsAnalyzerTransactorRaw struct { - Contract *TransactionsAnalyzerTransactor // Generic write-only contract binding to access the raw methods on +// TransactionPostProcessorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type TransactionPostProcessorTransactorRaw struct { + Contract *TransactionPostProcessorTransactor // Generic write-only contract binding to access the raw methods on } -// NewTransactionsAnalyzer creates a new instance of TransactionsAnalyzer, bound to a specific deployed contract. -func NewTransactionsAnalyzer(address common.Address, backend bind.ContractBackend) (*TransactionsAnalyzer, error) { - contract, err := bindTransactionsAnalyzer(address, backend, backend, backend) +// NewTransactionPostProcessor creates a new instance of TransactionPostProcessor, bound to a specific deployed contract. +func NewTransactionPostProcessor(address common.Address, backend bind.ContractBackend) (*TransactionPostProcessor, error) { + contract, err := bindTransactionPostProcessor(address, backend, backend, backend) if err != nil { return nil, err } - return &TransactionsAnalyzer{TransactionsAnalyzerCaller: TransactionsAnalyzerCaller{contract: contract}, TransactionsAnalyzerTransactor: TransactionsAnalyzerTransactor{contract: contract}, TransactionsAnalyzerFilterer: TransactionsAnalyzerFilterer{contract: contract}}, nil + return &TransactionPostProcessor{TransactionPostProcessorCaller: TransactionPostProcessorCaller{contract: contract}, TransactionPostProcessorTransactor: TransactionPostProcessorTransactor{contract: contract}, TransactionPostProcessorFilterer: TransactionPostProcessorFilterer{contract: contract}}, nil } -// NewTransactionsAnalyzerCaller creates a new read-only instance of TransactionsAnalyzer, bound to a specific deployed contract. -func NewTransactionsAnalyzerCaller(address common.Address, caller bind.ContractCaller) (*TransactionsAnalyzerCaller, error) { - contract, err := bindTransactionsAnalyzer(address, caller, nil, nil) +// NewTransactionPostProcessorCaller creates a new read-only instance of TransactionPostProcessor, bound to a specific deployed contract. +func NewTransactionPostProcessorCaller(address common.Address, caller bind.ContractCaller) (*TransactionPostProcessorCaller, error) { + contract, err := bindTransactionPostProcessor(address, caller, nil, nil) if err != nil { return nil, err } - return &TransactionsAnalyzerCaller{contract: contract}, nil + return &TransactionPostProcessorCaller{contract: contract}, nil } -// NewTransactionsAnalyzerTransactor creates a new write-only instance of TransactionsAnalyzer, bound to a specific deployed contract. -func NewTransactionsAnalyzerTransactor(address common.Address, transactor bind.ContractTransactor) (*TransactionsAnalyzerTransactor, error) { - contract, err := bindTransactionsAnalyzer(address, nil, transactor, nil) +// NewTransactionPostProcessorTransactor creates a new write-only instance of TransactionPostProcessor, bound to a specific deployed contract. +func NewTransactionPostProcessorTransactor(address common.Address, transactor bind.ContractTransactor) (*TransactionPostProcessorTransactor, error) { + contract, err := bindTransactionPostProcessor(address, nil, transactor, nil) if err != nil { return nil, err } - return &TransactionsAnalyzerTransactor{contract: contract}, nil + return &TransactionPostProcessorTransactor{contract: contract}, nil } -// NewTransactionsAnalyzerFilterer creates a new log filterer instance of TransactionsAnalyzer, bound to a specific deployed contract. -func NewTransactionsAnalyzerFilterer(address common.Address, filterer bind.ContractFilterer) (*TransactionsAnalyzerFilterer, error) { - contract, err := bindTransactionsAnalyzer(address, nil, nil, filterer) +// NewTransactionPostProcessorFilterer creates a new log filterer instance of TransactionPostProcessor, bound to a specific deployed contract. +func NewTransactionPostProcessorFilterer(address common.Address, filterer bind.ContractFilterer) (*TransactionPostProcessorFilterer, error) { + contract, err := bindTransactionPostProcessor(address, nil, nil, filterer) if err != nil { return nil, err } - return &TransactionsAnalyzerFilterer{contract: contract}, nil + return &TransactionPostProcessorFilterer{contract: contract}, nil } -// bindTransactionsAnalyzer binds a generic wrapper to an already deployed contract. -func bindTransactionsAnalyzer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := TransactionsAnalyzerMetaData.GetAbi() +// bindTransactionPostProcessor binds a generic wrapper to an already deployed contract. +func bindTransactionPostProcessor(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := TransactionPostProcessorMetaData.GetAbi() if err != nil { return nil, err } @@ -181,46 +182,46 @@ func bindTransactionsAnalyzer(address common.Address, caller bind.ContractCaller // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_TransactionsAnalyzer *TransactionsAnalyzerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _TransactionsAnalyzer.Contract.TransactionsAnalyzerCaller.contract.Call(opts, result, method, params...) +func (_TransactionPostProcessor *TransactionPostProcessorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TransactionPostProcessor.Contract.TransactionPostProcessorCaller.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_TransactionsAnalyzer *TransactionsAnalyzerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.TransactionsAnalyzerTransactor.contract.Transfer(opts) +func (_TransactionPostProcessor *TransactionPostProcessorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.TransactionPostProcessorTransactor.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_TransactionsAnalyzer *TransactionsAnalyzerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.TransactionsAnalyzerTransactor.contract.Transact(opts, method, params...) +func (_TransactionPostProcessor *TransactionPostProcessorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.TransactionPostProcessorTransactor.contract.Transact(opts, method, params...) } // Call invokes the (constant) contract method with params as input values and // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_TransactionsAnalyzer *TransactionsAnalyzerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _TransactionsAnalyzer.Contract.contract.Call(opts, result, method, params...) +func (_TransactionPostProcessor *TransactionPostProcessorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TransactionPostProcessor.Contract.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.contract.Transfer(opts) +func (_TransactionPostProcessor *TransactionPostProcessorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.contract.Transact(opts, method, params...) +func (_TransactionPostProcessor *TransactionPostProcessorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.contract.Transact(opts, method, params...) } // DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. // // Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { +func (_TransactionPostProcessor *TransactionPostProcessorCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _TransactionsAnalyzer.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + err := _TransactionPostProcessor.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") if err != nil { return *new([32]byte), err @@ -235,23 +236,23 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) DEFAULTADMINROLE(opts * // DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. // // Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) DEFAULTADMINROLE() ([32]byte, error) { - return _TransactionsAnalyzer.Contract.DEFAULTADMINROLE(&_TransactionsAnalyzer.CallOpts) +func (_TransactionPostProcessor *TransactionPostProcessorSession) DEFAULTADMINROLE() ([32]byte, error) { + return _TransactionPostProcessor.Contract.DEFAULTADMINROLE(&_TransactionPostProcessor.CallOpts) } // DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. // // Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_TransactionsAnalyzer *TransactionsAnalyzerCallerSession) DEFAULTADMINROLE() ([32]byte, error) { - return _TransactionsAnalyzer.Contract.DEFAULTADMINROLE(&_TransactionsAnalyzer.CallOpts) +func (_TransactionPostProcessor *TransactionPostProcessorCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _TransactionPostProcessor.Contract.DEFAULTADMINROLE(&_TransactionPostProcessor.CallOpts) } // EOAADMINROLE is a free data retrieval call binding the contract method 0x508a50f4. // // Solidity: function EOA_ADMIN_ROLE() view returns(bytes32) -func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) EOAADMINROLE(opts *bind.CallOpts) ([32]byte, error) { +func (_TransactionPostProcessor *TransactionPostProcessorCaller) EOAADMINROLE(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _TransactionsAnalyzer.contract.Call(opts, &out, "EOA_ADMIN_ROLE") + err := _TransactionPostProcessor.contract.Call(opts, &out, "EOA_ADMIN_ROLE") if err != nil { return *new([32]byte), err @@ -266,23 +267,23 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) EOAADMINROLE(opts *bind // EOAADMINROLE is a free data retrieval call binding the contract method 0x508a50f4. // // Solidity: function EOA_ADMIN_ROLE() view returns(bytes32) -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) EOAADMINROLE() ([32]byte, error) { - return _TransactionsAnalyzer.Contract.EOAADMINROLE(&_TransactionsAnalyzer.CallOpts) +func (_TransactionPostProcessor *TransactionPostProcessorSession) EOAADMINROLE() ([32]byte, error) { + return _TransactionPostProcessor.Contract.EOAADMINROLE(&_TransactionPostProcessor.CallOpts) } // EOAADMINROLE is a free data retrieval call binding the contract method 0x508a50f4. // // Solidity: function EOA_ADMIN_ROLE() view returns(bytes32) -func (_TransactionsAnalyzer *TransactionsAnalyzerCallerSession) EOAADMINROLE() ([32]byte, error) { - return _TransactionsAnalyzer.Contract.EOAADMINROLE(&_TransactionsAnalyzer.CallOpts) +func (_TransactionPostProcessor *TransactionPostProcessorCallerSession) EOAADMINROLE() ([32]byte, error) { + return _TransactionPostProcessor.Contract.EOAADMINROLE(&_TransactionPostProcessor.CallOpts) } // HOOKCALLERROLE is a free data retrieval call binding the contract method 0x5f03a661. // // Solidity: function HOOK_CALLER_ROLE() view returns(bytes32) -func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) HOOKCALLERROLE(opts *bind.CallOpts) ([32]byte, error) { +func (_TransactionPostProcessor *TransactionPostProcessorCaller) HOOKCALLERROLE(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _TransactionsAnalyzer.contract.Call(opts, &out, "HOOK_CALLER_ROLE") + err := _TransactionPostProcessor.contract.Call(opts, &out, "HOOK_CALLER_ROLE") if err != nil { return *new([32]byte), err @@ -297,23 +298,23 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) HOOKCALLERROLE(opts *bi // HOOKCALLERROLE is a free data retrieval call binding the contract method 0x5f03a661. // // Solidity: function HOOK_CALLER_ROLE() view returns(bytes32) -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) HOOKCALLERROLE() ([32]byte, error) { - return _TransactionsAnalyzer.Contract.HOOKCALLERROLE(&_TransactionsAnalyzer.CallOpts) +func (_TransactionPostProcessor *TransactionPostProcessorSession) HOOKCALLERROLE() ([32]byte, error) { + return _TransactionPostProcessor.Contract.HOOKCALLERROLE(&_TransactionPostProcessor.CallOpts) } // HOOKCALLERROLE is a free data retrieval call binding the contract method 0x5f03a661. // // Solidity: function HOOK_CALLER_ROLE() view returns(bytes32) -func (_TransactionsAnalyzer *TransactionsAnalyzerCallerSession) HOOKCALLERROLE() ([32]byte, error) { - return _TransactionsAnalyzer.Contract.HOOKCALLERROLE(&_TransactionsAnalyzer.CallOpts) +func (_TransactionPostProcessor *TransactionPostProcessorCallerSession) HOOKCALLERROLE() ([32]byte, error) { + return _TransactionPostProcessor.Contract.HOOKCALLERROLE(&_TransactionPostProcessor.CallOpts) } // GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. // // Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { +func (_TransactionPostProcessor *TransactionPostProcessorCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { var out []interface{} - err := _TransactionsAnalyzer.contract.Call(opts, &out, "getRoleAdmin", role) + err := _TransactionPostProcessor.contract.Call(opts, &out, "getRoleAdmin", role) if err != nil { return *new([32]byte), err @@ -328,23 +329,23 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) GetRoleAdmin(opts *bind // GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. // // Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _TransactionsAnalyzer.Contract.GetRoleAdmin(&_TransactionsAnalyzer.CallOpts, role) +func (_TransactionPostProcessor *TransactionPostProcessorSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _TransactionPostProcessor.Contract.GetRoleAdmin(&_TransactionPostProcessor.CallOpts, role) } // GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. // // Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_TransactionsAnalyzer *TransactionsAnalyzerCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _TransactionsAnalyzer.Contract.GetRoleAdmin(&_TransactionsAnalyzer.CallOpts, role) +func (_TransactionPostProcessor *TransactionPostProcessorCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _TransactionPostProcessor.Contract.GetRoleAdmin(&_TransactionPostProcessor.CallOpts, role) } // HasRole is a free data retrieval call binding the contract method 0x91d14854. // // Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { +func (_TransactionPostProcessor *TransactionPostProcessorCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { var out []interface{} - err := _TransactionsAnalyzer.contract.Call(opts, &out, "hasRole", role, account) + err := _TransactionPostProcessor.contract.Call(opts, &out, "hasRole", role, account) if err != nil { return *new(bool), err @@ -359,23 +360,23 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) HasRole(opts *bind.Call // HasRole is a free data retrieval call binding the contract method 0x91d14854. // // Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _TransactionsAnalyzer.Contract.HasRole(&_TransactionsAnalyzer.CallOpts, role, account) +func (_TransactionPostProcessor *TransactionPostProcessorSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _TransactionPostProcessor.Contract.HasRole(&_TransactionPostProcessor.CallOpts, role, account) } // HasRole is a free data retrieval call binding the contract method 0x91d14854. // // Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_TransactionsAnalyzer *TransactionsAnalyzerCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _TransactionsAnalyzer.Contract.HasRole(&_TransactionsAnalyzer.CallOpts, role, account) +func (_TransactionPostProcessor *TransactionPostProcessorCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _TransactionPostProcessor.Contract.HasRole(&_TransactionPostProcessor.CallOpts, role, account) } // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { +func (_TransactionPostProcessor *TransactionPostProcessorCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { var out []interface{} - err := _TransactionsAnalyzer.contract.Call(opts, &out, "supportsInterface", interfaceId) + err := _TransactionPostProcessor.contract.Call(opts, &out, "supportsInterface", interfaceId) if err != nil { return *new(bool), err @@ -390,146 +391,146 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerCaller) SupportsInterface(opts // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _TransactionsAnalyzer.Contract.SupportsInterface(&_TransactionsAnalyzer.CallOpts, interfaceId) +func (_TransactionPostProcessor *TransactionPostProcessorSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _TransactionPostProcessor.Contract.SupportsInterface(&_TransactionPostProcessor.CallOpts, interfaceId) } // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_TransactionsAnalyzer *TransactionsAnalyzerCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _TransactionsAnalyzer.Contract.SupportsInterface(&_TransactionsAnalyzer.CallOpts, interfaceId) +func (_TransactionPostProcessor *TransactionPostProcessorCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _TransactionPostProcessor.Contract.SupportsInterface(&_TransactionPostProcessor.CallOpts, interfaceId) } // AddOnBlockEndCallback is a paid mutator transaction binding the contract method 0xee546fd8. // // Solidity: function addOnBlockEndCallback(address callbackAddress) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) AddOnBlockEndCallback(opts *bind.TransactOpts, callbackAddress common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.contract.Transact(opts, "addOnBlockEndCallback", callbackAddress) +func (_TransactionPostProcessor *TransactionPostProcessorTransactor) AddOnBlockEndCallback(opts *bind.TransactOpts, callbackAddress common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.contract.Transact(opts, "addOnBlockEndCallback", callbackAddress) } // AddOnBlockEndCallback is a paid mutator transaction binding the contract method 0xee546fd8. // // Solidity: function addOnBlockEndCallback(address callbackAddress) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) AddOnBlockEndCallback(callbackAddress common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.AddOnBlockEndCallback(&_TransactionsAnalyzer.TransactOpts, callbackAddress) +func (_TransactionPostProcessor *TransactionPostProcessorSession) AddOnBlockEndCallback(callbackAddress common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.AddOnBlockEndCallback(&_TransactionPostProcessor.TransactOpts, callbackAddress) } // AddOnBlockEndCallback is a paid mutator transaction binding the contract method 0xee546fd8. // // Solidity: function addOnBlockEndCallback(address callbackAddress) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) AddOnBlockEndCallback(callbackAddress common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.AddOnBlockEndCallback(&_TransactionsAnalyzer.TransactOpts, callbackAddress) +func (_TransactionPostProcessor *TransactionPostProcessorTransactorSession) AddOnBlockEndCallback(callbackAddress common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.AddOnBlockEndCallback(&_TransactionPostProcessor.TransactOpts, callbackAddress) } // GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. // // Solidity: function grantRole(bytes32 role, address account) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.contract.Transact(opts, "grantRole", role, account) +func (_TransactionPostProcessor *TransactionPostProcessorTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.contract.Transact(opts, "grantRole", role, account) } // GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. // // Solidity: function grantRole(bytes32 role, address account) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.GrantRole(&_TransactionsAnalyzer.TransactOpts, role, account) +func (_TransactionPostProcessor *TransactionPostProcessorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.GrantRole(&_TransactionPostProcessor.TransactOpts, role, account) } // GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. // // Solidity: function grantRole(bytes32 role, address account) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.GrantRole(&_TransactionsAnalyzer.TransactOpts, role, account) +func (_TransactionPostProcessor *TransactionPostProcessorTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.GrantRole(&_TransactionPostProcessor.TransactOpts, role, account) } // Initialize is a paid mutator transaction binding the contract method 0x485cc955. // // Solidity: function initialize(address eoaAdmin, address authorizedCaller) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) Initialize(opts *bind.TransactOpts, eoaAdmin common.Address, authorizedCaller common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.contract.Transact(opts, "initialize", eoaAdmin, authorizedCaller) +func (_TransactionPostProcessor *TransactionPostProcessorTransactor) Initialize(opts *bind.TransactOpts, eoaAdmin common.Address, authorizedCaller common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.contract.Transact(opts, "initialize", eoaAdmin, authorizedCaller) } // Initialize is a paid mutator transaction binding the contract method 0x485cc955. // // Solidity: function initialize(address eoaAdmin, address authorizedCaller) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) Initialize(eoaAdmin common.Address, authorizedCaller common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.Initialize(&_TransactionsAnalyzer.TransactOpts, eoaAdmin, authorizedCaller) +func (_TransactionPostProcessor *TransactionPostProcessorSession) Initialize(eoaAdmin common.Address, authorizedCaller common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.Initialize(&_TransactionPostProcessor.TransactOpts, eoaAdmin, authorizedCaller) } // Initialize is a paid mutator transaction binding the contract method 0x485cc955. // // Solidity: function initialize(address eoaAdmin, address authorizedCaller) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) Initialize(eoaAdmin common.Address, authorizedCaller common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.Initialize(&_TransactionsAnalyzer.TransactOpts, eoaAdmin, authorizedCaller) +func (_TransactionPostProcessor *TransactionPostProcessorTransactorSession) Initialize(eoaAdmin common.Address, authorizedCaller common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.Initialize(&_TransactionPostProcessor.TransactOpts, eoaAdmin, authorizedCaller) } -// OnBlock is a paid mutator transaction binding the contract method 0xdfc6cc36. +// OnBlock is a paid mutator transaction binding the contract method 0xa440c314. // -// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool)[] transactions) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) OnBlock(opts *bind.TransactOpts, transactions []StructsTransaction) (*types.Transaction, error) { - return _TransactionsAnalyzer.contract.Transact(opts, "onBlock", transactions) +// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint256)[] transactions) returns() +func (_TransactionPostProcessor *TransactionPostProcessorTransactor) OnBlock(opts *bind.TransactOpts, transactions []StructsTransaction) (*types.Transaction, error) { + return _TransactionPostProcessor.contract.Transact(opts, "onBlock", transactions) } -// OnBlock is a paid mutator transaction binding the contract method 0xdfc6cc36. +// OnBlock is a paid mutator transaction binding the contract method 0xa440c314. // -// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool)[] transactions) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) OnBlock(transactions []StructsTransaction) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.OnBlock(&_TransactionsAnalyzer.TransactOpts, transactions) +// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint256)[] transactions) returns() +func (_TransactionPostProcessor *TransactionPostProcessorSession) OnBlock(transactions []StructsTransaction) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.OnBlock(&_TransactionPostProcessor.TransactOpts, transactions) } -// OnBlock is a paid mutator transaction binding the contract method 0xdfc6cc36. +// OnBlock is a paid mutator transaction binding the contract method 0xa440c314. // -// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool)[] transactions) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) OnBlock(transactions []StructsTransaction) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.OnBlock(&_TransactionsAnalyzer.TransactOpts, transactions) +// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint256)[] transactions) returns() +func (_TransactionPostProcessor *TransactionPostProcessorTransactorSession) OnBlock(transactions []StructsTransaction) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.OnBlock(&_TransactionPostProcessor.TransactOpts, transactions) } // RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. // // Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.contract.Transact(opts, "renounceRole", role, callerConfirmation) +func (_TransactionPostProcessor *TransactionPostProcessorTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.contract.Transact(opts, "renounceRole", role, callerConfirmation) } // RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. // // Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.RenounceRole(&_TransactionsAnalyzer.TransactOpts, role, callerConfirmation) +func (_TransactionPostProcessor *TransactionPostProcessorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.RenounceRole(&_TransactionPostProcessor.TransactOpts, role, callerConfirmation) } // RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. // // Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.RenounceRole(&_TransactionsAnalyzer.TransactOpts, role, callerConfirmation) +func (_TransactionPostProcessor *TransactionPostProcessorTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.RenounceRole(&_TransactionPostProcessor.TransactOpts, role, callerConfirmation) } // RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. // // Solidity: function revokeRole(bytes32 role, address account) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.contract.Transact(opts, "revokeRole", role, account) +func (_TransactionPostProcessor *TransactionPostProcessorTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.contract.Transact(opts, "revokeRole", role, account) } // RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. // // Solidity: function revokeRole(bytes32 role, address account) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.RevokeRole(&_TransactionsAnalyzer.TransactOpts, role, account) +func (_TransactionPostProcessor *TransactionPostProcessorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.RevokeRole(&_TransactionPostProcessor.TransactOpts, role, account) } // RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. // // Solidity: function revokeRole(bytes32 role, address account) returns() -func (_TransactionsAnalyzer *TransactionsAnalyzerTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _TransactionsAnalyzer.Contract.RevokeRole(&_TransactionsAnalyzer.TransactOpts, role, account) +func (_TransactionPostProcessor *TransactionPostProcessorTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _TransactionPostProcessor.Contract.RevokeRole(&_TransactionPostProcessor.TransactOpts, role, account) } -// TransactionsAnalyzerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the TransactionsAnalyzer contract. -type TransactionsAnalyzerInitializedIterator struct { - Event *TransactionsAnalyzerInitialized // Event containing the contract specifics and raw log +// TransactionPostProcessorInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the TransactionPostProcessor contract. +type TransactionPostProcessorInitializedIterator struct { + Event *TransactionPostProcessorInitialized // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -543,7 +544,7 @@ type TransactionsAnalyzerInitializedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TransactionsAnalyzerInitializedIterator) Next() bool { +func (it *TransactionPostProcessorInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -552,7 +553,7 @@ func (it *TransactionsAnalyzerInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TransactionsAnalyzerInitialized) + it.Event = new(TransactionPostProcessorInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -567,7 +568,7 @@ func (it *TransactionsAnalyzerInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TransactionsAnalyzerInitialized) + it.Event = new(TransactionPostProcessorInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -583,19 +584,19 @@ func (it *TransactionsAnalyzerInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TransactionsAnalyzerInitializedIterator) Error() error { +func (it *TransactionPostProcessorInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TransactionsAnalyzerInitializedIterator) Close() error { +func (it *TransactionPostProcessorInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TransactionsAnalyzerInitialized represents a Initialized event raised by the TransactionsAnalyzer contract. -type TransactionsAnalyzerInitialized struct { +// TransactionPostProcessorInitialized represents a Initialized event raised by the TransactionPostProcessor contract. +type TransactionPostProcessorInitialized struct { Version uint64 Raw types.Log // Blockchain specific contextual infos } @@ -603,21 +604,21 @@ type TransactionsAnalyzerInitialized struct { // FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // // Solidity: event Initialized(uint64 version) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterInitialized(opts *bind.FilterOpts) (*TransactionsAnalyzerInitializedIterator, error) { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) FilterInitialized(opts *bind.FilterOpts) (*TransactionPostProcessorInitializedIterator, error) { - logs, sub, err := _TransactionsAnalyzer.contract.FilterLogs(opts, "Initialized") + logs, sub, err := _TransactionPostProcessor.contract.FilterLogs(opts, "Initialized") if err != nil { return nil, err } - return &TransactionsAnalyzerInitializedIterator{contract: _TransactionsAnalyzer.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &TransactionPostProcessorInitializedIterator{contract: _TransactionPostProcessor.contract, event: "Initialized", logs: logs, sub: sub}, nil } // WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // // Solidity: event Initialized(uint64 version) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *TransactionsAnalyzerInitialized) (event.Subscription, error) { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *TransactionPostProcessorInitialized) (event.Subscription, error) { - logs, sub, err := _TransactionsAnalyzer.contract.WatchLogs(opts, "Initialized") + logs, sub, err := _TransactionPostProcessor.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } @@ -627,8 +628,8 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchInitialized(opts select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TransactionsAnalyzerInitialized) - if err := _TransactionsAnalyzer.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(TransactionPostProcessorInitialized) + if err := _TransactionPostProcessor.contract.UnpackLog(event, "Initialized", log); err != nil { return err } event.Raw = log @@ -652,18 +653,18 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchInitialized(opts // ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // // Solidity: event Initialized(uint64 version) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) ParseInitialized(log types.Log) (*TransactionsAnalyzerInitialized, error) { - event := new(TransactionsAnalyzerInitialized) - if err := _TransactionsAnalyzer.contract.UnpackLog(event, "Initialized", log); err != nil { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) ParseInitialized(log types.Log) (*TransactionPostProcessorInitialized, error) { + event := new(TransactionPostProcessorInitialized) + if err := _TransactionPostProcessor.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TransactionsAnalyzerRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the TransactionsAnalyzer contract. -type TransactionsAnalyzerRoleAdminChangedIterator struct { - Event *TransactionsAnalyzerRoleAdminChanged // Event containing the contract specifics and raw log +// TransactionPostProcessorRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the TransactionPostProcessor contract. +type TransactionPostProcessorRoleAdminChangedIterator struct { + Event *TransactionPostProcessorRoleAdminChanged // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -677,7 +678,7 @@ type TransactionsAnalyzerRoleAdminChangedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TransactionsAnalyzerRoleAdminChangedIterator) Next() bool { +func (it *TransactionPostProcessorRoleAdminChangedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -686,7 +687,7 @@ func (it *TransactionsAnalyzerRoleAdminChangedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TransactionsAnalyzerRoleAdminChanged) + it.Event = new(TransactionPostProcessorRoleAdminChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -701,7 +702,7 @@ func (it *TransactionsAnalyzerRoleAdminChangedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TransactionsAnalyzerRoleAdminChanged) + it.Event = new(TransactionPostProcessorRoleAdminChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -717,19 +718,19 @@ func (it *TransactionsAnalyzerRoleAdminChangedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TransactionsAnalyzerRoleAdminChangedIterator) Error() error { +func (it *TransactionPostProcessorRoleAdminChangedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TransactionsAnalyzerRoleAdminChangedIterator) Close() error { +func (it *TransactionPostProcessorRoleAdminChangedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TransactionsAnalyzerRoleAdminChanged represents a RoleAdminChanged event raised by the TransactionsAnalyzer contract. -type TransactionsAnalyzerRoleAdminChanged struct { +// TransactionPostProcessorRoleAdminChanged represents a RoleAdminChanged event raised by the TransactionPostProcessor contract. +type TransactionPostProcessorRoleAdminChanged struct { Role [32]byte PreviousAdminRole [32]byte NewAdminRole [32]byte @@ -739,7 +740,7 @@ type TransactionsAnalyzerRoleAdminChanged struct { // FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. // // Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*TransactionsAnalyzerRoleAdminChangedIterator, error) { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*TransactionPostProcessorRoleAdminChangedIterator, error) { var roleRule []interface{} for _, roleItem := range role { @@ -754,17 +755,17 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterRoleAdminChange newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) } - logs, sub, err := _TransactionsAnalyzer.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + logs, sub, err := _TransactionPostProcessor.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) if err != nil { return nil, err } - return &TransactionsAnalyzerRoleAdminChangedIterator{contract: _TransactionsAnalyzer.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil + return &TransactionPostProcessorRoleAdminChangedIterator{contract: _TransactionPostProcessor.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil } // WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. // // Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *TransactionsAnalyzerRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *TransactionPostProcessorRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { var roleRule []interface{} for _, roleItem := range role { @@ -779,7 +780,7 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleAdminChanged newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) } - logs, sub, err := _TransactionsAnalyzer.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + logs, sub, err := _TransactionPostProcessor.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) if err != nil { return nil, err } @@ -789,8 +790,8 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleAdminChanged select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TransactionsAnalyzerRoleAdminChanged) - if err := _TransactionsAnalyzer.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + event := new(TransactionPostProcessorRoleAdminChanged) + if err := _TransactionPostProcessor.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { return err } event.Raw = log @@ -814,18 +815,18 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleAdminChanged // ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. // // Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) ParseRoleAdminChanged(log types.Log) (*TransactionsAnalyzerRoleAdminChanged, error) { - event := new(TransactionsAnalyzerRoleAdminChanged) - if err := _TransactionsAnalyzer.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) ParseRoleAdminChanged(log types.Log) (*TransactionPostProcessorRoleAdminChanged, error) { + event := new(TransactionPostProcessorRoleAdminChanged) + if err := _TransactionPostProcessor.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TransactionsAnalyzerRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the TransactionsAnalyzer contract. -type TransactionsAnalyzerRoleGrantedIterator struct { - Event *TransactionsAnalyzerRoleGranted // Event containing the contract specifics and raw log +// TransactionPostProcessorRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the TransactionPostProcessor contract. +type TransactionPostProcessorRoleGrantedIterator struct { + Event *TransactionPostProcessorRoleGranted // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -839,7 +840,7 @@ type TransactionsAnalyzerRoleGrantedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TransactionsAnalyzerRoleGrantedIterator) Next() bool { +func (it *TransactionPostProcessorRoleGrantedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -848,7 +849,7 @@ func (it *TransactionsAnalyzerRoleGrantedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TransactionsAnalyzerRoleGranted) + it.Event = new(TransactionPostProcessorRoleGranted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -863,7 +864,7 @@ func (it *TransactionsAnalyzerRoleGrantedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TransactionsAnalyzerRoleGranted) + it.Event = new(TransactionPostProcessorRoleGranted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -879,19 +880,19 @@ func (it *TransactionsAnalyzerRoleGrantedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TransactionsAnalyzerRoleGrantedIterator) Error() error { +func (it *TransactionPostProcessorRoleGrantedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TransactionsAnalyzerRoleGrantedIterator) Close() error { +func (it *TransactionPostProcessorRoleGrantedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TransactionsAnalyzerRoleGranted represents a RoleGranted event raised by the TransactionsAnalyzer contract. -type TransactionsAnalyzerRoleGranted struct { +// TransactionPostProcessorRoleGranted represents a RoleGranted event raised by the TransactionPostProcessor contract. +type TransactionPostProcessorRoleGranted struct { Role [32]byte Account common.Address Sender common.Address @@ -901,7 +902,7 @@ type TransactionsAnalyzerRoleGranted struct { // FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. // // Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*TransactionsAnalyzerRoleGrantedIterator, error) { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*TransactionPostProcessorRoleGrantedIterator, error) { var roleRule []interface{} for _, roleItem := range role { @@ -916,17 +917,17 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterRoleGranted(opt senderRule = append(senderRule, senderItem) } - logs, sub, err := _TransactionsAnalyzer.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + logs, sub, err := _TransactionPostProcessor.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) if err != nil { return nil, err } - return &TransactionsAnalyzerRoleGrantedIterator{contract: _TransactionsAnalyzer.contract, event: "RoleGranted", logs: logs, sub: sub}, nil + return &TransactionPostProcessorRoleGrantedIterator{contract: _TransactionPostProcessor.contract, event: "RoleGranted", logs: logs, sub: sub}, nil } // WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. // // Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *TransactionsAnalyzerRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *TransactionPostProcessorRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { var roleRule []interface{} for _, roleItem := range role { @@ -941,7 +942,7 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleGranted(opts senderRule = append(senderRule, senderItem) } - logs, sub, err := _TransactionsAnalyzer.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + logs, sub, err := _TransactionPostProcessor.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) if err != nil { return nil, err } @@ -951,8 +952,8 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleGranted(opts select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TransactionsAnalyzerRoleGranted) - if err := _TransactionsAnalyzer.contract.UnpackLog(event, "RoleGranted", log); err != nil { + event := new(TransactionPostProcessorRoleGranted) + if err := _TransactionPostProcessor.contract.UnpackLog(event, "RoleGranted", log); err != nil { return err } event.Raw = log @@ -976,18 +977,18 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleGranted(opts // ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. // // Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) ParseRoleGranted(log types.Log) (*TransactionsAnalyzerRoleGranted, error) { - event := new(TransactionsAnalyzerRoleGranted) - if err := _TransactionsAnalyzer.contract.UnpackLog(event, "RoleGranted", log); err != nil { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) ParseRoleGranted(log types.Log) (*TransactionPostProcessorRoleGranted, error) { + event := new(TransactionPostProcessorRoleGranted) + if err := _TransactionPostProcessor.contract.UnpackLog(event, "RoleGranted", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TransactionsAnalyzerRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the TransactionsAnalyzer contract. -type TransactionsAnalyzerRoleRevokedIterator struct { - Event *TransactionsAnalyzerRoleRevoked // Event containing the contract specifics and raw log +// TransactionPostProcessorRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the TransactionPostProcessor contract. +type TransactionPostProcessorRoleRevokedIterator struct { + Event *TransactionPostProcessorRoleRevoked // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1001,7 +1002,7 @@ type TransactionsAnalyzerRoleRevokedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TransactionsAnalyzerRoleRevokedIterator) Next() bool { +func (it *TransactionPostProcessorRoleRevokedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1010,7 +1011,7 @@ func (it *TransactionsAnalyzerRoleRevokedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TransactionsAnalyzerRoleRevoked) + it.Event = new(TransactionPostProcessorRoleRevoked) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1025,7 +1026,7 @@ func (it *TransactionsAnalyzerRoleRevokedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TransactionsAnalyzerRoleRevoked) + it.Event = new(TransactionPostProcessorRoleRevoked) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1041,19 +1042,19 @@ func (it *TransactionsAnalyzerRoleRevokedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TransactionsAnalyzerRoleRevokedIterator) Error() error { +func (it *TransactionPostProcessorRoleRevokedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TransactionsAnalyzerRoleRevokedIterator) Close() error { +func (it *TransactionPostProcessorRoleRevokedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TransactionsAnalyzerRoleRevoked represents a RoleRevoked event raised by the TransactionsAnalyzer contract. -type TransactionsAnalyzerRoleRevoked struct { +// TransactionPostProcessorRoleRevoked represents a RoleRevoked event raised by the TransactionPostProcessor contract. +type TransactionPostProcessorRoleRevoked struct { Role [32]byte Account common.Address Sender common.Address @@ -1063,7 +1064,7 @@ type TransactionsAnalyzerRoleRevoked struct { // FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // // Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*TransactionsAnalyzerRoleRevokedIterator, error) { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*TransactionPostProcessorRoleRevokedIterator, error) { var roleRule []interface{} for _, roleItem := range role { @@ -1078,17 +1079,17 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterRoleRevoked(opt senderRule = append(senderRule, senderItem) } - logs, sub, err := _TransactionsAnalyzer.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + logs, sub, err := _TransactionPostProcessor.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) if err != nil { return nil, err } - return &TransactionsAnalyzerRoleRevokedIterator{contract: _TransactionsAnalyzer.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil + return &TransactionPostProcessorRoleRevokedIterator{contract: _TransactionPostProcessor.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil } // WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // // Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *TransactionsAnalyzerRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *TransactionPostProcessorRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { var roleRule []interface{} for _, roleItem := range role { @@ -1103,7 +1104,7 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleRevoked(opts senderRule = append(senderRule, senderItem) } - logs, sub, err := _TransactionsAnalyzer.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + logs, sub, err := _TransactionPostProcessor.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) if err != nil { return nil, err } @@ -1113,8 +1114,8 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleRevoked(opts select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TransactionsAnalyzerRoleRevoked) - if err := _TransactionsAnalyzer.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + event := new(TransactionPostProcessorRoleRevoked) + if err := _TransactionPostProcessor.contract.UnpackLog(event, "RoleRevoked", log); err != nil { return err } event.Raw = log @@ -1138,18 +1139,18 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchRoleRevoked(opts // ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // // Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) ParseRoleRevoked(log types.Log) (*TransactionsAnalyzerRoleRevoked, error) { - event := new(TransactionsAnalyzerRoleRevoked) - if err := _TransactionsAnalyzer.contract.UnpackLog(event, "RoleRevoked", log); err != nil { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) ParseRoleRevoked(log types.Log) (*TransactionPostProcessorRoleRevoked, error) { + event := new(TransactionPostProcessorRoleRevoked) + if err := _TransactionPostProcessor.contract.UnpackLog(event, "RoleRevoked", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TransactionsAnalyzerTransactionsConvertedIterator is returned from FilterTransactionsConverted and is used to iterate over the raw logs and unpacked data for TransactionsConverted events raised by the TransactionsAnalyzer contract. -type TransactionsAnalyzerTransactionsConvertedIterator struct { - Event *TransactionsAnalyzerTransactionsConverted // Event containing the contract specifics and raw log +// TransactionPostProcessorTransactionsConvertedIterator is returned from FilterTransactionsConverted and is used to iterate over the raw logs and unpacked data for TransactionsConverted events raised by the TransactionPostProcessor contract. +type TransactionPostProcessorTransactionsConvertedIterator struct { + Event *TransactionPostProcessorTransactionsConverted // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1163,7 +1164,7 @@ type TransactionsAnalyzerTransactionsConvertedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TransactionsAnalyzerTransactionsConvertedIterator) Next() bool { +func (it *TransactionPostProcessorTransactionsConvertedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1172,7 +1173,7 @@ func (it *TransactionsAnalyzerTransactionsConvertedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TransactionsAnalyzerTransactionsConverted) + it.Event = new(TransactionPostProcessorTransactionsConverted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1187,7 +1188,7 @@ func (it *TransactionsAnalyzerTransactionsConvertedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TransactionsAnalyzerTransactionsConverted) + it.Event = new(TransactionPostProcessorTransactionsConverted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1203,19 +1204,19 @@ func (it *TransactionsAnalyzerTransactionsConvertedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TransactionsAnalyzerTransactionsConvertedIterator) Error() error { +func (it *TransactionPostProcessorTransactionsConvertedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TransactionsAnalyzerTransactionsConvertedIterator) Close() error { +func (it *TransactionPostProcessorTransactionsConvertedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TransactionsAnalyzerTransactionsConverted represents a TransactionsConverted event raised by the TransactionsAnalyzer contract. -type TransactionsAnalyzerTransactionsConverted struct { +// TransactionPostProcessorTransactionsConverted represents a TransactionsConverted event raised by the TransactionPostProcessor contract. +type TransactionPostProcessorTransactionsConverted struct { TransactionsLength *big.Int Raw types.Log // Blockchain specific contextual infos } @@ -1223,21 +1224,21 @@ type TransactionsAnalyzerTransactionsConverted struct { // FilterTransactionsConverted is a free log retrieval operation binding the contract event 0x3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41. // // Solidity: event TransactionsConverted(uint256 transactionsLength) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) FilterTransactionsConverted(opts *bind.FilterOpts) (*TransactionsAnalyzerTransactionsConvertedIterator, error) { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) FilterTransactionsConverted(opts *bind.FilterOpts) (*TransactionPostProcessorTransactionsConvertedIterator, error) { - logs, sub, err := _TransactionsAnalyzer.contract.FilterLogs(opts, "TransactionsConverted") + logs, sub, err := _TransactionPostProcessor.contract.FilterLogs(opts, "TransactionsConverted") if err != nil { return nil, err } - return &TransactionsAnalyzerTransactionsConvertedIterator{contract: _TransactionsAnalyzer.contract, event: "TransactionsConverted", logs: logs, sub: sub}, nil + return &TransactionPostProcessorTransactionsConvertedIterator{contract: _TransactionPostProcessor.contract, event: "TransactionsConverted", logs: logs, sub: sub}, nil } // WatchTransactionsConverted is a free log subscription operation binding the contract event 0x3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41. // // Solidity: event TransactionsConverted(uint256 transactionsLength) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchTransactionsConverted(opts *bind.WatchOpts, sink chan<- *TransactionsAnalyzerTransactionsConverted) (event.Subscription, error) { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) WatchTransactionsConverted(opts *bind.WatchOpts, sink chan<- *TransactionPostProcessorTransactionsConverted) (event.Subscription, error) { - logs, sub, err := _TransactionsAnalyzer.contract.WatchLogs(opts, "TransactionsConverted") + logs, sub, err := _TransactionPostProcessor.contract.WatchLogs(opts, "TransactionsConverted") if err != nil { return nil, err } @@ -1247,8 +1248,8 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchTransactionsConv select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TransactionsAnalyzerTransactionsConverted) - if err := _TransactionsAnalyzer.contract.UnpackLog(event, "TransactionsConverted", log); err != nil { + event := new(TransactionPostProcessorTransactionsConverted) + if err := _TransactionPostProcessor.contract.UnpackLog(event, "TransactionsConverted", log); err != nil { return err } event.Raw = log @@ -1272,9 +1273,9 @@ func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) WatchTransactionsConv // ParseTransactionsConverted is a log parse operation binding the contract event 0x3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41. // // Solidity: event TransactionsConverted(uint256 transactionsLength) -func (_TransactionsAnalyzer *TransactionsAnalyzerFilterer) ParseTransactionsConverted(log types.Log) (*TransactionsAnalyzerTransactionsConverted, error) { - event := new(TransactionsAnalyzerTransactionsConverted) - if err := _TransactionsAnalyzer.contract.UnpackLog(event, "TransactionsConverted", log); err != nil { +func (_TransactionPostProcessor *TransactionPostProcessorFilterer) ParseTransactionsConverted(log types.Log) (*TransactionPostProcessorTransactionsConverted, error) { + event := new(TransactionPostProcessorTransactionsConverted) + if err := _TransactionPostProcessor.contract.UnpackLog(event, "TransactionsConverted", log); err != nil { return nil, err } event.Raw = log diff --git a/contracts/generated/ZenBase/ZenBase.go b/contracts/generated/ZenBase/ZenBase.go index ac5c1cfad1..2eee7d3f8d 100644 --- a/contracts/generated/ZenBase/ZenBase.go +++ b/contracts/generated/ZenBase/ZenBase.go @@ -40,12 +40,13 @@ type StructsTransaction struct { Data []byte From common.Address Successful bool + GasUsed *big.Int } // ZenBaseMetaData contains all meta data concerning the ZenBase contract. var ZenBaseMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionAnalyzer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"transactionDecoder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162001205380380620012058339810160408190526200003491620001e2565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e919062000333565b5060046200008d828262000333565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd919062000410565b60405180910390fd5b620000d18162000156565b506001600160a01b038216620000fb5760405162461bcd60e51b8152600401620000bd9062000461565b6001600160a01b038116620001245760405162461bcd60e51b8152600401620000bd90620004b2565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055620004c4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001c681620001a8565b8114620001d257600080fd5b50565b8051620001b581620001bb565b60008060408385031215620001fa57620001fa600080fd5b6000620002088585620001d5565b92505060206200021b85828601620001d5565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200026657607f821691505b6020821081036200027b576200027b6200023b565b50919050565b6000620001b56200028f8381565b90565b6200029d8362000281565b815460001960089490940293841b1916921b91909117905550565b6000620002c781848462000292565b505050565b81811015620002eb57620002e2600082620002b8565b600101620002cc565b5050565b601f821115620002c7576000818152602090206020601f85010481016020851015620003185750805b6200032c6020601f860104830182620002cc565b5050505050565b81516001600160401b038111156200034f576200034f62000225565b6200035b825462000251565b62000368828285620002ef565b506020601f821160018114620003a05760008315620003875750848201515b600019600885021c19811660028502178555506200032c565b600084815260208120601f198516915b82811015620003d25787850151825560209485019460019092019101620003b0565b5084821015620003f05783870151600019601f87166008021c191681555b50505050600202600101905550565b6200040a81620001a8565b82525050565b60208101620001b58284620003ff565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164648152637265737360e01b602082015290505b60400190565b60208082528101620001b58162000420565b60238152602081017f496e76616c6964207472616e73616374696f6e206465636f646572206164647281526265737360e81b602082015290506200045b565b60208082528101620001b58162000473565b610d3180620004d46000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c578063a9059cbb11610066578063a9059cbb146101a9578063d43827cb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610126610163366004610a38565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a6a565b6100ec610301565b6101156101b7366004610968565b610310565b6101866101ca366004610aca565b61031e565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a38565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6102f56105a3565b6102ff60006105e9565b565b60606004805461022a90610b5b565b6000336102bb81858561052b565b6006546001600160a01b031633146103515760405162461bcd60e51b815260040161034890610b87565b60405180910390fd5b60008190036103725760405162461bcd60e51b815260040161034890610be8565b60005b8181101561043e576103bd83838381811061039257610392610c23565b90506020028101906103a49190610c39565b6103b69061010081019060e001610a38565b6001610653565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103f0576103f0610c23565b90506020028101906104029190610c39565b6104149061010081019060e001610a38565b6001604051610424929190610c76565b60405180910390a18061043681610ca7565b915050610375565b505050565b61044b6105a3565b6001600160a01b03811661048e5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b610497816105e9565b50565b61043e838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161034893929190610cc0565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b03821661059857600060405163ec442f0560e01b81526004016103489190610a6a565b61043e838383610792565b6005546001600160a01b031633146102ff57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067d57600060405163ec442f0560e01b81526004016103489190610a6a565b61068960008383610792565b5050565b6001600160a01b0384166106d05760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b0383166107135760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103489190610a6a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce8565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161034893929190610cc0565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b600060208284031215610a4d57610a4d600080fd5b6000610a59848461094c565b949350505050565b6109a981610927565b602081016102c18284610a61565b60008083601f840112610a8d57610a8d600080fd5b50813567ffffffffffffffff811115610aa857610aa8600080fd5b602083019150836020820283011115610ac357610ac3600080fd5b9250929050565b60008060208385031215610ae057610ae0600080fd5b823567ffffffffffffffff811115610afa57610afa600080fd5b610b0685828601610a78565b92509250509250929050565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561011e1936849003018112610c5457610c54600080fd5b9190910192915050565b60006102c1610c6a8381565b90565b6109a981610c5e565b60408101610c848285610a61565b6102e66020830184610c6d565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb957610cb9610c91565b5060010190565b60608101610cce8286610a61565b610cdb60208301856109bd565b610a5960408301846109bd565b808201808211156102c1576102c1610c9156fea264697066735822122048701ff6e6532ede0b0df9de82baa5245930739e2e68d3b8758fae219541e75564736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionPostProcessor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"transactionDecoder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162001205380380620012058339810160408190526200003491620001e2565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e919062000333565b5060046200008d828262000333565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd919062000410565b60405180910390fd5b620000d18162000156565b506001600160a01b038216620000fb5760405162461bcd60e51b8152600401620000bd9062000461565b6001600160a01b038116620001245760405162461bcd60e51b8152600401620000bd90620004b2565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055620004c4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001c681620001a8565b8114620001d257600080fd5b50565b8051620001b581620001bb565b60008060408385031215620001fa57620001fa600080fd5b6000620002088585620001d5565b92505060206200021b85828601620001d5565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200026657607f821691505b6020821081036200027b576200027b6200023b565b50919050565b6000620001b56200028f8381565b90565b6200029d8362000281565b815460001960089490940293841b1916921b91909117905550565b6000620002c781848462000292565b505050565b81811015620002eb57620002e2600082620002b8565b600101620002cc565b5050565b601f821115620002c7576000818152602090206020601f85010481016020851015620003185750805b6200032c6020601f860104830182620002cc565b5050505050565b81516001600160401b038111156200034f576200034f62000225565b6200035b825462000251565b62000368828285620002ef565b506020601f821160018114620003a05760008315620003875750848201515b600019600885021c19811660028502178555506200032c565b600084815260208120601f198516915b82811015620003d25787850151825560209485019460019092019101620003b0565b5084821015620003f05783870151600019601f87166008021c191681555b50505050600202600101905550565b6200040a81620001a8565b82525050565b60208101620001b58284620003ff565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164648152637265737360e01b602082015290505b60400190565b60208082528101620001b58162000420565b60238152602081017f496e76616c6964207472616e73616374696f6e206465636f646572206164647281526265737360e81b602082015290506200045b565b60208082528101620001b58162000473565b610d3180620004d46000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c57806395d89b411161006657806395d89b41146101b4578063a9059cbb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b806370a082311461016a578063715018a6146101935780638da5cb5b1461019b57600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce56714610146578063516c75101461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610168610163366004610a8a565b6102ed565b005b610126610178366004610ad2565b6001600160a01b031660009081526020819052604090205490565b610168610412565b6005546001600160a01b03166040516100f99190610b04565b6100ec610426565b6101156101ca366004610968565b610435565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610168610216366004610ad2565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6006546001600160a01b031633146103205760405162461bcd60e51b815260040161031790610b87565b60405180910390fd5b60008190036103415760405162461bcd60e51b815260040161031790610be8565b60005b8181101561040d5761038c83838381811061036157610361610c23565b90506020028101906103739190610c39565b6103859061010081019060e001610ad2565b60016105a3565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103bf576103bf610c23565b90506020028101906103d19190610c39565b6103e39061010081019060e001610ad2565b60016040516103f3929190610c76565b60405180910390a18061040581610ca7565b915050610344565b505050565b61041a6105dd565b6104246000610623565b565b60606004805461022a90610b5b565b6000336102bb81858561052b565b61044b6105dd565b6001600160a01b03811661048e5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103179190610b04565b61049781610623565b50565b61040d838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161031793929190610cc0565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103179190610b04565b6001600160a01b03821661059857600060405163ec442f0560e01b81526004016103179190610b04565b61040d838383610792565b6001600160a01b0382166105cd57600060405163ec442f0560e01b81526004016103179190610b04565b6105d960008383610792565b5050565b6005546001600160a01b0316331461042457336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103179190610b04565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384166106d05760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103179190610b04565b6001600160a01b0383166107135760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103179190610b04565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce8565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161031793929190610cc0565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b60008083601f840112610a4d57610a4d600080fd5b50813567ffffffffffffffff811115610a6857610a68600080fd5b602083019150836020820283011115610a8357610a83600080fd5b9250929050565b60008060208385031215610aa057610aa0600080fd5b823567ffffffffffffffff811115610aba57610aba600080fd5b610ac685828601610a38565b92509250509250929050565b600060208284031215610ae757610ae7600080fd5b6000610af3848461094c565b949350505050565b6109a981610927565b602081016102c18284610afb565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1936849003018112610c5457610c54600080fd5b9190910192915050565b60006102c1610c6a8381565b90565b6109a981610c5e565b60408101610c848285610afb565b6102e66020830184610c6d565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb957610cb9610c91565b5060010190565b60608101610cce8286610afb565b610cdb60208301856109bd565b610af360408301846109bd565b808201808211156102c1576102c1610c9156fea2646970667358221220d1e4c8a1a9939ba9b9221b70ef13ea7a91ec9bbb2d142b6f613a67a070c8bbd564736f6c63430008140033", } // ZenBaseABI is the input ABI used to generate the binding from. @@ -57,7 +58,7 @@ var ZenBaseABI = ZenBaseMetaData.ABI var ZenBaseBin = ZenBaseMetaData.Bin // DeployZenBase deploys a new Ethereum contract, binding an instance of ZenBase to it. -func DeployZenBase(auth *bind.TransactOpts, backend bind.ContractBackend, transactionAnalyzer common.Address, transactionDecoder common.Address) (common.Address, *types.Transaction, *ZenBase, error) { +func DeployZenBase(auth *bind.TransactOpts, backend bind.ContractBackend, transactionPostProcessor common.Address, transactionDecoder common.Address) (common.Address, *types.Transaction, *ZenBase, error) { parsed, err := ZenBaseMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -66,7 +67,7 @@ func DeployZenBase(auth *bind.TransactOpts, backend bind.ContractBackend, transa return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZenBaseBin), backend, transactionAnalyzer, transactionDecoder) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZenBaseBin), backend, transactionPostProcessor, transactionDecoder) if err != nil { return common.Address{}, nil, nil, err } @@ -453,23 +454,23 @@ func (_ZenBase *ZenBaseTransactorSession) Approve(spender common.Address, value return _ZenBase.Contract.Approve(&_ZenBase.TransactOpts, spender, value) } -// OnBlockEnd is a paid mutator transaction binding the contract method 0xd43827cb. +// OnBlockEnd is a paid mutator transaction binding the contract method 0x516c7510. // -// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool)[] transactions) returns() +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint256)[] transactions) returns() func (_ZenBase *ZenBaseTransactor) OnBlockEnd(opts *bind.TransactOpts, transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.contract.Transact(opts, "onBlockEnd", transactions) } -// OnBlockEnd is a paid mutator transaction binding the contract method 0xd43827cb. +// OnBlockEnd is a paid mutator transaction binding the contract method 0x516c7510. // -// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool)[] transactions) returns() +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint256)[] transactions) returns() func (_ZenBase *ZenBaseSession) OnBlockEnd(transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.Contract.OnBlockEnd(&_ZenBase.TransactOpts, transactions) } -// OnBlockEnd is a paid mutator transaction binding the contract method 0xd43827cb. +// OnBlockEnd is a paid mutator transaction binding the contract method 0x516c7510. // -// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool)[] transactions) returns() +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint256)[] transactions) returns() func (_ZenBase *ZenBaseTransactorSession) OnBlockEnd(transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.Contract.OnBlockEnd(&_ZenBase.TransactOpts, transactions) } diff --git a/contracts/src/system/SystemDeployer.sol b/contracts/src/system/SystemDeployer.sol index 126e97458b..6f8008b22b 100644 --- a/contracts/src/system/SystemDeployer.sol +++ b/contracts/src/system/SystemDeployer.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "./TransactionsAnalyzer.sol"; +import "./TransactionPostProcessor.sol"; contract SystemDeployer { event SystemContractDeployed(string name, address contractAddress); @@ -12,7 +12,7 @@ contract SystemDeployer { } function deployAnalyzer(address eoaAdmin) internal { - TransactionsAnalyzer transactionsAnalyzer = new TransactionsAnalyzer(); + TransactionPostProcessor transactionsAnalyzer = new TransactionPostProcessor(); bytes memory callData = abi.encodeWithSelector(transactionsAnalyzer.initialize.selector, eoaAdmin, msg.sender); address transactionsAnalyzerProxy = deployProxy(address(transactionsAnalyzer), eoaAdmin, callData); diff --git a/contracts/src/system/Transaction.sol b/contracts/src/system/Transaction.sol index 4d87c53924..2e5577a85e 100644 --- a/contracts/src/system/Transaction.sol +++ b/contracts/src/system/Transaction.sol @@ -12,6 +12,7 @@ library Structs { uint256 value; bytes data; address from; - bool successful; + bool successful; + uint256 gasUsed; } } \ No newline at end of file diff --git a/contracts/src/system/TransactionsAnalyzer.sol b/contracts/src/system/TransactionPostProcessor.sol similarity index 96% rename from contracts/src/system/TransactionsAnalyzer.sol rename to contracts/src/system/TransactionPostProcessor.sol index 01ce032cc4..705dd84060 100644 --- a/contracts/src/system/TransactionsAnalyzer.sol +++ b/contracts/src/system/TransactionPostProcessor.sol @@ -8,7 +8,7 @@ import "./OnBlockEndCallback.sol"; import "./Transaction.sol"; //TODO: @PR Review - Pick appropriate name -contract TransactionsAnalyzer is Initializable, AccessControl{ +contract TransactionPostProcessor is Initializable, AccessControl{ using Structs for Structs.Transaction; bytes32 public constant EOA_ADMIN_ROLE = keccak256("EOA_ADMIN_ROLE"); diff --git a/contracts/src/zen/ZenBase.sol b/contracts/src/zen/ZenBase.sol index 115f67d0aa..381ebf3ab9 100644 --- a/contracts/src/zen/ZenBase.sol +++ b/contracts/src/zen/ZenBase.sol @@ -31,10 +31,10 @@ contract ZenBase is OnBlockEndCallback, ERC20, Ownable { * @dev Constructor that gives msg.sender all of existing tokens. * You can customize the initial supply as needed. */ - constructor(address transactionAnalyzer, address transactionDecoder) ERC20("Zen", "ZEN") Ownable(msg.sender) { - require(transactionAnalyzer != address(0), "Invalid transaction analyzer address"); + constructor(address transactionPostProcessor, address transactionDecoder) ERC20("Zen", "ZEN") Ownable(msg.sender) { + require(transactionPostProcessor != address(0), "Invalid transaction analyzer address"); require(transactionDecoder != address(0), "Invalid transaction decoder address"); - _caller = transactionAnalyzer; + _caller = transactionPostProcessor; _transactionDecoder = transactionDecoder; } diff --git a/go/common/enclave.go b/go/common/enclave.go index 002141e8b0..824a9ccdaa 100644 --- a/go/common/enclave.go +++ b/go/common/enclave.go @@ -172,6 +172,6 @@ type ProducedSecretResponse struct { } type EnclavePublicConfig struct { - L2MessageBusAddress gethcommon.Address - TransactionAnalyzerAddress gethcommon.Address + L2MessageBusAddress gethcommon.Address + TransactionPostProcessorAddress gethcommon.Address } diff --git a/go/common/query_types.go b/go/common/query_types.go index e2ac2e4592..240e7abd8b 100644 --- a/go/common/query_types.go +++ b/go/common/query_types.go @@ -111,10 +111,10 @@ func (p *QueryPagination) UnmarshalJSON(data []byte) error { } type TenNetworkInfo struct { - ManagementContractAddress common.Address - L1StartHash common.Hash - MessageBusAddress common.Address - L2MessageBusAddress common.Address - ImportantContracts map[string]common.Address // map of contract name to address - TransactionAnalyzerAddress common.Address + ManagementContractAddress common.Address + L1StartHash common.Hash + MessageBusAddress common.Address + L2MessageBusAddress common.Address + ImportantContracts map[string]common.Address // map of contract name to address + TransactionPostProcessorAddress common.Address } diff --git a/go/common/rpc/generated/enclave.pb.go b/go/common/rpc/generated/enclave.pb.go index 39cc62b034..3448c01bd4 100644 --- a/go/common/rpc/generated/enclave.pb.go +++ b/go/common/rpc/generated/enclave.pb.go @@ -63,9 +63,9 @@ type EnclavePublicConfigResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - L2MessageBusAddress []byte `protobuf:"bytes,1,opt,name=l2MessageBusAddress,proto3" json:"l2MessageBusAddress,omitempty"` - TransactionAnalyzerAddress []byte `protobuf:"bytes,2,opt,name=transactionAnalyzerAddress,proto3" json:"transactionAnalyzerAddress,omitempty"` - SystemError *SystemError `protobuf:"bytes,3,opt,name=systemError,proto3" json:"systemError,omitempty"` + L2MessageBusAddress []byte `protobuf:"bytes,1,opt,name=l2MessageBusAddress,proto3" json:"l2MessageBusAddress,omitempty"` + TransactionPostProcessorAddress []byte `protobuf:"bytes,2,opt,name=transactionPostProcessorAddress,proto3" json:"transactionPostProcessorAddress,omitempty"` + SystemError *SystemError `protobuf:"bytes,3,opt,name=systemError,proto3" json:"systemError,omitempty"` } func (x *EnclavePublicConfigResponse) Reset() { @@ -107,9 +107,9 @@ func (x *EnclavePublicConfigResponse) GetL2MessageBusAddress() []byte { return nil } -func (x *EnclavePublicConfigResponse) GetTransactionAnalyzerAddress() []byte { +func (x *EnclavePublicConfigResponse) GetTransactionPostProcessorAddress() []byte { if x != nil { - return x.TransactionAnalyzerAddress + return x.TransactionPostProcessorAddress } return nil } @@ -4361,254 +4361,241 @@ var file_enclave_proto_rawDesc = []byte{ 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc9, 0x01, 0x0a, 0x1b, 0x45, 0x6e, 0x63, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x1b, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x6c, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x75, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x6c, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x42, 0x75, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3e, 0x0a, 0x1a, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, - 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1a, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x7a, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x90, 0x01, - 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, - 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x2f, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x65, 0x61, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x65, 0x61, - 0x64, 0x22, 0x2e, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, - 0x65, 0x71, 0x4e, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x65, 0x71, 0x4e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, - 0x6f, 0x22, 0x62, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, + 0x42, 0x75, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x48, 0x0a, 0x1f, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x1f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, + 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, + 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, + 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2f, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x22, 0x2e, 0x0a, 0x16, 0x47, + 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x6f, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x6f, 0x22, 0x62, 0x0a, 0x10, 0x47, + 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x62, 0x61, 0x74, 0x63, 0x68, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0x83, 0x01, 0x0a, 0x15, + 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x4d, + 0x73, 0x67, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x4f, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x6f, 0x6c, 0x6c, 0x75, + 0x70, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x53, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x32, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2d, 0x0a, 0x15, + 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x12, 0x38, 0x0a, 0x0b, 0x73, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x22, 0x38, 0x0a, 0x0a, 0x50, + 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x4d, 0x0a, 0x0b, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x6f, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, - 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, - 0x68, 0x22, 0x83, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x6d, - 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x6f, 0x6c, 0x6c, 0x75, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, - 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4f, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x73, 0x67, 0x12, 0x1a, - 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x4c, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x2d, 0x0a, 0x15, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, - 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, - 0x68, 0x22, 0x38, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x4d, 0x0a, 0x0b, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, - 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6f, 0x0a, 0x1d, 0x47, 0x65, - 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x37, 0x0a, 0x1d, 0x44, - 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, - 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x37, 0x0a, 0x1d, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x22, 0x6c, + 0x0a, 0x1e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, + 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, + 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x1c, + 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, - 0x48, 0x61, 0x73, 0x68, 0x22, 0x6c, 0x0a, 0x1e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x6b, 0x0a, 0x1d, + 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, + 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x36, 0x0a, 0x12, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x20, 0x0a, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x66, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x2b, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x61, + 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x12, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x48, 0x00, 0x52, 0x12, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x66, + 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x22, 0x7b, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x6d, 0x73, 0x67, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x45, 0x78, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x4d, 0x73, 0x67, 0x52, + 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, + 0x0a, 0x1b, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x74, + 0x6f, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, + 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x22, 0x30, 0x0a, 0x1c, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, + 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x9a, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, + 0x31, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6c, 0x31, 0x48, + 0x65, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x32, 0x48, 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6c, 0x32, 0x48, 0x65, 0x61, 0x64, 0x12, 0x38, 0x0a, 0x0b, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x14, 0x0a, 0x12, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa4, 0x01, 0x0a, 0x13, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x41, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, + 0x73, 0x67, 0x52, 0x14, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x1c, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x22, 0x6b, 0x0a, 0x1d, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x36, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x66, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, - 0x49, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x61, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x12, 0x66, - 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x12, 0x66, 0x72, 0x6f, 0x6d, 0x53, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, - 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x7b, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x29, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x74, 0x52, 0x6f, 0x6c, 0x6c, - 0x75, 0x70, 0x4d, 0x73, 0x67, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, + 0x6f, 0x72, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x96, 0x01, 0x0a, 0x16, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1c, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, + 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x1b, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, - 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x4e, 0x6f, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x71, 0x4e, - 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x6f, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x22, 0x30, 0x0a, 0x1c, 0x45, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, - 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x0f, 0x0a, - 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x9a, - 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x32, 0x48, - 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6c, 0x32, 0x48, 0x65, 0x61, - 0x64, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x14, 0x0a, 0x12, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0xa4, 0x01, 0x0a, 0x13, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x14, 0x61, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x14, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x38, - 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x96, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x1c, - 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, - 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x58, 0x0a, 0x12, 0x49, 0x6e, - 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x42, 0x0a, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x22, 0x4f, 0x0a, 0x13, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, - 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x12, 0x0a, 0x10, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, - 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6b, 0x0a, 0x11, 0x45, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x09, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x38, 0x0a, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x32, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, - 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x65, 0x6e, - 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x49, 0x0a, 0x0d, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x7e, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x65, - 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, - 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, - 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x22, 0xb0, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, - 0x17, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x58, 0x0a, 0x12, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, + 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x1c, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x63, + 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x1c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x4f, + 0x0a, 0x13, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x12, 0x0a, 0x10, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x6b, 0x0a, 0x11, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x63, 0x6c, + 0x61, 0x76, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x6e, 0x63, + 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x32, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x49, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x7e, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x70, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x22, + 0xb0, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x17, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x17, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, - 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x52, + 0x17, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x33, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x54, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x65, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x65, 0x64, 0x54, 0x78, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x42, + 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x33, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x54, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x54, 0x78, 0x22, 0x84, 0x01, - 0x0a, 0x10, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, - 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x42, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x73, - 0x67, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x22, 0x4f, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x0a, 0x0e, 0x4f, 0x62, 0x73, - 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0f, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, - 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x46, 0x0a, 0x1a, 0x47, - 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x45, 0x78, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x52, 0x05, 0x62, 0x61, 0x74, + 0x63, 0x68, 0x22, 0x4f, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x0a, 0x0e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, + 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, + 0x83, 0x01, 0x0a, 0x0f, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, @@ -4616,441 +4603,455 @@ var file_enclave_proto_rawDesc = []byte{ 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x0d, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x48, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x46, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8f, 0x01, + 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, + 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x0d, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x48, + 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, + 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, + 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, + 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, + 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x48, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, + 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, + 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, - 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, + 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x48, - 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, - 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, - 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x11, - 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x12, - 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, - 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, - 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, + 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4a, + 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x6f, + 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, + 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x61, 0x73, 0x68, 0x22, 0x5f, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x58, 0x0a, 0x10, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x34, 0x0a, 0x15, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x15, + 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x61, 0x73, 0x68, - 0x22, 0x5f, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x58, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x15, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x11, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x24, 0x0a, 0x12, 0x55, 0x6e, - 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, - 0x22, 0x4f, 0x0a, 0x13, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x3e, 0x0a, 0x12, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x22, 0x87, 0x01, 0x0a, 0x13, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, - 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x24, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, 0x13, 0x55, 0x6e, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x0a, 0x0e, 0x47, - 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, - 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, - 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, - 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x67, 0x0a, - 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x0b, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, - 0x72, 0x67, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x14, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, - 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x6f, - 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xae, 0x01, 0x0a, 0x1a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x56, 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, - 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x73, 0x67, 0x52, 0x17, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x38, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, 0x0a, 0x17, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, - 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x31, 0x48, 0x65, - 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, - 0x22, 0x89, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, - 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x06, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x53, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x6e, 0x0a, 0x0b, - 0x45, 0x78, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x73, 0x67, 0x12, 0x31, 0x0a, 0x06, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1a, - 0x0a, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, - 0x52, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x78, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x74, 0x78, 0x73, 0x22, 0xaa, 0x05, 0x0a, - 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, - 0x1e, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, - 0x14, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, - 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x04, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x78, 0x48, - 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x54, 0x78, 0x48, 0x61, 0x73, - 0x68, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x53, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x10, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, - 0x48, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x52, 0x65, 0x63, 0x65, - 0x69, 0x70, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x78, 0x74, 0x72, 0x61, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x45, 0x78, 0x74, 0x72, 0x61, 0x12, 0x1c, 0x0a, - 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x47, - 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x47, - 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x73, 0x55, 0x73, - 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x47, 0x61, 0x73, 0x55, 0x73, 0x65, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x12, - 0x44, 0x0a, 0x1d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x40, 0x0a, 0x1b, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, - 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x48, 0x61, 0x73, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1b, 0x4c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x12, 0x48, 0x0a, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x10, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x52, 0x12, 0x43, - 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x72, 0x65, - 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, - 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, - 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, - 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, - 0x72, 0x65, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x0c, 0x45, 0x78, - 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x4d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x06, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x24, - 0x0a, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, - 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x14, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x52, 0x6f, 0x6c, 0x6c, - 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xdb, 0x02, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, - 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, - 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2c, 0x0a, 0x11, - 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x31, 0x48, 0x65, 0x61, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0b, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, - 0x61, 0x76, 0x65, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x45, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x48, 0x0a, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, - 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x52, 0x12, 0x43, 0x72, - 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, - 0x0a, 0x0e, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x71, 0x4e, 0x6f, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x22, 0xc9, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x48, 0x6f, 0x73, - 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x61, 0x0a, 0x0d, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, - 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, - 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, - 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x32, 0x84, 0x16, 0x0a, 0x0c, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x18, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x4e, 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x12, - 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, - 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x45, - 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x48, 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x1b, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, - 0x65, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x4c, 0x31, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x19, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x4f, 0x62, 0x73, 0x43, 0x61, - 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x39, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x17, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x6f, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x27, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x4b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, - 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, - 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, - 0x65, 0x47, 0x61, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3e, 0x0a, 0x12, 0x45, + 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x87, 0x01, 0x0a, 0x13, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, - 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, - 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0b, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x14, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x1e, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x45, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x2e, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x12, 0x21, 0x2e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, - 0x79, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, - 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, - 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, - 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, - 0x75, 0x70, 0x12, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, - 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, - 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x6c, 0x0a, 0x15, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, - 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, - 0x0a, 0x0f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x73, 0x12, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x16, 0x44, 0x65, - 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, - 0x61, 0x6e, 0x63, 0x79, 0x12, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, - 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, + 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x63, 0x6c, + 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x45, 0x6e, + 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, + 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x67, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x0b, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x67, 0x73, 0x22, 0xc0, 0x01, + 0x0a, 0x14, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, + 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, + 0x65, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, + 0x76, 0x65, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0xae, 0x01, 0x0a, 0x1a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, + 0x56, 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x17, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x47, 0x0a, 0x17, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x61, 0x75, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x61, 0x75, + 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x06, 0x6c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x0d, 0x43, + 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x53, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x18, 0x0a, 0x07, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x6e, 0x0a, 0x0b, 0x45, 0x78, 0x74, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x4d, 0x73, 0x67, 0x12, 0x31, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, + 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x78, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x74, 0x78, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x03, 0x74, 0x78, 0x73, 0x22, 0xaa, 0x05, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, + 0x12, 0x0a, 0x04, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x52, + 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x06, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x53, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x72, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, + 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x78, 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x05, 0x45, 0x78, 0x74, 0x72, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x47, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x47, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x12, 0x44, 0x0a, 0x1d, 0x4c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x1d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, + 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x40, 0x0a, 0x1b, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1b, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x48, 0x0a, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x52, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x43, + 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, + 0x72, 0x65, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x0c, 0x45, 0x78, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, + 0x70, 0x4d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, + 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x61, 0x74, 0x63, + 0x68, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x32, + 0x0a, 0x14, 0x63, 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x14, 0x63, 0x61, + 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x22, 0xdb, 0x02, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2c, 0x0a, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x31, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x31, + 0x48, 0x65, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, + 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, + 0x12, 0x48, 0x0a, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x4d, 0x73, 0x67, 0x52, 0x12, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4c, 0x61, 0x73, 0x74, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0e, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x71, 0x4e, 0x6f, + 0x22, 0xc9, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x20, + 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, + 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, + 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x48, 0x6f, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x61, 0x0a, 0x0d, + 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, + 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x32, + 0x84, 0x16, 0x0a, 0x0c, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x41, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x41, 0x74, 0x74, 0x65, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x12, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, 0x49, 0x6e, + 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x45, 0x6e, + 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x12, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4c, 0x31, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, + 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, + 0x07, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x4f, 0x62, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x04, 0x53, 0x74, 0x6f, + 0x70, 0x12, 0x16, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, + 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, + 0x15, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0a, 0x47, + 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, + 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x20, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1c, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x4e, 0x0a, 0x0b, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1d, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x4e, 0x0a, 0x0b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x12, 0x1d, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, + 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, + 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x42, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x12, 0x14, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, 0x47, 0x65, + 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, + 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x53, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, + 0x65, 0x71, 0x4e, 0x6f, 0x12, 0x21, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x42, 0x79, 0x53, 0x65, 0x71, 0x4e, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, + 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0b, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x12, 0x1e, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x69, 0x0a, 0x14, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x78, 0x70, 0x6f, + 0x72, 0x74, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x44, 0x65, + 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x4c, 0x32, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x32, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, + 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x16, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x12, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, - 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, - 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, - 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x17, 0x5a, 0x15, - 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, + 0x6f, 0x67, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, + 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, + 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, + 0x0a, 0x13, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x17, 0x5a, 0x15, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, + 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/go/common/rpc/generated/enclave.proto b/go/common/rpc/generated/enclave.proto index d5dd4dc2f8..ac81abcca3 100644 --- a/go/common/rpc/generated/enclave.proto +++ b/go/common/rpc/generated/enclave.proto @@ -107,7 +107,7 @@ message EnclavePublicConfigRequest {} message EnclavePublicConfigResponse{ bytes l2MessageBusAddress = 1; - bytes transactionAnalyzerAddress = 2; + bytes transactionPostProcessorAddress = 2; SystemError systemError = 3; } diff --git a/go/enclave/enclave.go b/go/enclave/enclave.go index 3e494569cd..a3dd512946 100644 --- a/go/enclave/enclave.go +++ b/go/enclave/enclave.go @@ -884,14 +884,14 @@ func (e *enclaveImpl) EnclavePublicConfig(context.Context) (*common.EnclavePubli if systemError != nil { return nil, systemError } - analyzerAddress := e.scb.TransactionAnalyzerAddress() + analyzerAddress := e.scb.TransactionPostProcessor() if analyzerAddress == nil { analyzerAddress = &gethcommon.Address{} } return &common.EnclavePublicConfig{ - L2MessageBusAddress: address, - TransactionAnalyzerAddress: *analyzerAddress, + L2MessageBusAddress: address, + TransactionPostProcessorAddress: *analyzerAddress, }, nil } diff --git a/go/enclave/nodetype/sequencer.go b/go/enclave/nodetype/sequencer.go index 21eb3299ee..6893598c92 100644 --- a/go/enclave/nodetype/sequencer.go +++ b/go/enclave/nodetype/sequencer.go @@ -217,7 +217,7 @@ func (s *sequencer) createGenesisBatch(ctx context.Context, block *types.Header) s.logger.Crit("Failed to derive system contract addresses", log.ErrKey, err) return err } - s.logger.Info("[SystemContracts] Deployer initialized", "transactionAnalyzer", systemAddresses.ToString()) + s.logger.Info("[SystemContracts] Deployer initialized", "transactionPostProcessor", systemAddresses.ToString()) s.logger.Info("[SystemContracts] Message Bus Contract minted successfully", "address", cb.TxExecResults[0].Receipt.ContractAddress.Hex()) return nil diff --git a/go/enclave/rpc_server.go b/go/enclave/rpc_server.go index 5d70610cde..9a098d2fea 100644 --- a/go/enclave/rpc_server.go +++ b/go/enclave/rpc_server.go @@ -476,8 +476,8 @@ func (s *RPCServer) EnclavePublicConfig(ctx context.Context, _ *generated.Enclav return &generated.EnclavePublicConfigResponse{SystemError: toRPCError(sysError)}, nil } return &generated.EnclavePublicConfigResponse{ - L2MessageBusAddress: enclaveCfg.L2MessageBusAddress.Bytes(), - TransactionAnalyzerAddress: enclaveCfg.TransactionAnalyzerAddress.Bytes(), + L2MessageBusAddress: enclaveCfg.L2MessageBusAddress.Bytes(), + TransactionPostProcessorAddress: enclaveCfg.TransactionPostProcessorAddress.Bytes(), }, nil } diff --git a/go/enclave/system/hooks.go b/go/enclave/system/hooks.go index b58a90bed0..dd7cb1cf86 100644 --- a/go/enclave/system/hooks.go +++ b/go/enclave/system/hooks.go @@ -11,7 +11,7 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" gethlog "github.com/ethereum/go-ethereum/log" - "github.com/ten-protocol/go-ten/contracts/generated/TransactionsAnalyzer" + "github.com/ten-protocol/go-ten/contracts/generated/TransactionPostProcessor" "github.com/ten-protocol/go-ten/contracts/generated/ZenBase" "github.com/ten-protocol/go-ten/go/common" "github.com/ten-protocol/go-ten/go/enclave/core" @@ -20,8 +20,8 @@ import ( ) var ( - transactionsAnalyzerABI, _ = abi.JSON(strings.NewReader(TransactionsAnalyzer.TransactionsAnalyzerMetaData.ABI)) - ErrNoTransactions = fmt.Errorf("no transactions") + transactionPostProcessorABI, _ = abi.JSON(strings.NewReader(TransactionPostProcessor.TransactionPostProcessorMetaData.ABI)) + ErrNoTransactions = fmt.Errorf("no transactions") ) type SystemContractCallbacks interface { @@ -29,7 +29,7 @@ type SystemContractCallbacks interface { Initialize(batch *core.Batch, receipts types.Receipts) error Load() error CreateOnBatchEndTransaction(ctx context.Context, stateDB *state.StateDB, transactions common.L2Transactions, receipts types.Receipts) (*types.Transaction, error) - TransactionAnalyzerAddress() *gethcommon.Address + TransactionPostProcessor() *gethcommon.Address VerifyOnBlockReceipt(transactions common.L2Transactions, receipt *types.Receipt) (bool, error) } @@ -50,7 +50,7 @@ func NewSystemContractCallbacks(ownerWallet wallet.Wallet, logger gethlog.Logger } } -func (s *systemContractCallbacks) TransactionAnalyzerAddress() *gethcommon.Address { +func (s *systemContractCallbacks) TransactionPostProcessor() *gethcommon.Address { return s.transactionsAnalyzerAddress } @@ -138,7 +138,7 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex nonceForSyntheticTx := l2State.GetNonce(s.GetOwner()) s.logger.Debug("CreateOnBatchEndTransaction: Retrieved nonce for synthetic transaction", "nonce", nonceForSyntheticTx) - solidityTransactions := make([]TransactionsAnalyzer.StructsTransaction, 0) + solidityTransactions := make([]TransactionPostProcessor.StructsTransaction, 0) txSuccessMap := map[gethcommon.Hash]bool{} for _, receipt := range receipts { @@ -147,7 +147,7 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex for _, tx := range transactions { // Start of Selection - transaction := TransactionsAnalyzer.StructsTransaction{ + transaction := TransactionPostProcessor.StructsTransaction{ Nonce: big.NewInt(int64(tx.Nonce())), GasPrice: tx.GasPrice(), GasLimit: big.NewInt(int64(tx.Gas())), @@ -172,7 +172,7 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex s.logger.Debug("CreateOnBatchEndTransaction: Encoded transaction", "transactionHash", tx.Hash().Hex(), "sender", sender.Hex()) } - data, err := transactionsAnalyzerABI.Pack("onBlock", solidityTransactions) + data, err := transactionPostProcessorABI.Pack("onBlock", solidityTransactions) if err != nil { s.logger.Error("CreateOnBatchEndTransaction: Failed packing onBlock data", "error", err) return nil, fmt.Errorf("failed packing onBlock() %w", err) diff --git a/go/host/host.go b/go/host/host.go index 6cd5d5ae21..72a2c2c9f4 100644 --- a/go/host/host.go +++ b/go/host/host.go @@ -47,9 +47,9 @@ type host struct { metricRegistry gethmetrics.Registry // l2MessageBusAddress is fetched from the enclave but cache it here because it never changes - l2MessageBusAddress *gethcommon.Address - transactionAnalyzerAddress gethcommon.Address - newHeads chan *common.BatchHeader + l2MessageBusAddress *gethcommon.Address + transactionPostProcessorAddress gethcommon.Address + newHeads chan *common.BatchHeader } type batchListener struct { @@ -237,23 +237,23 @@ func (h *host) HealthCheck(ctx context.Context) (*hostcommon.HealthCheck, error) // ObscuroConfig returns info on the Obscuro network func (h *host) TenConfig() (*common.TenNetworkInfo, error) { - if h.l2MessageBusAddress == nil || h.transactionAnalyzerAddress.Cmp(gethcommon.Address{}) == 0 { + if h.l2MessageBusAddress == nil || h.transactionPostProcessorAddress.Cmp(gethcommon.Address{}) == 0 { publicCfg, err := h.EnclaveClient().EnclavePublicConfig(context.Background()) if err != nil { return nil, responses.ToInternalError(fmt.Errorf("unable to get L2 message bus address - %w", err)) } h.l2MessageBusAddress = &publicCfg.L2MessageBusAddress - h.transactionAnalyzerAddress = publicCfg.TransactionAnalyzerAddress + h.transactionPostProcessorAddress = publicCfg.TransactionPostProcessorAddress } return &common.TenNetworkInfo{ ManagementContractAddress: h.config.ManagementContractAddress, L1StartHash: h.config.L1StartHash, - MessageBusAddress: h.config.MessageBusAddress, - L2MessageBusAddress: *h.l2MessageBusAddress, - ImportantContracts: h.services.L1Publisher().GetImportantContracts(), - TransactionAnalyzerAddress: h.transactionAnalyzerAddress, + MessageBusAddress: h.config.MessageBusAddress, + L2MessageBusAddress: *h.l2MessageBusAddress, + ImportantContracts: h.services.L1Publisher().GetImportantContracts(), + TransactionPostProcessorAddress: h.transactionPostProcessorAddress, }, nil } diff --git a/go/host/rpc/clientapi/client_api_ten.go b/go/host/rpc/clientapi/client_api_ten.go index 7476add677..e6c427f64d 100644 --- a/go/host/rpc/clientapi/client_api_ten.go +++ b/go/host/rpc/clientapi/client_api_ten.go @@ -35,12 +35,12 @@ func (api *TenAPI) Config() (*ChecksumFormattedTenNetworkConfig, error) { // ChecksumFormattedTenNetworkConfig serialises the addresses as EIP55 checksum addresses. type ChecksumFormattedTenNetworkConfig struct { - ManagementContractAddress gethcommon.AddressEIP55 - L1StartHash gethcommon.Hash - MessageBusAddress gethcommon.AddressEIP55 - L2MessageBusAddress gethcommon.AddressEIP55 - ImportantContracts map[string]gethcommon.AddressEIP55 // map of contract name to address - TransactionAnalyzerAddress gethcommon.AddressEIP55 + ManagementContractAddress gethcommon.AddressEIP55 + L1StartHash gethcommon.Hash + MessageBusAddress gethcommon.AddressEIP55 + L2MessageBusAddress gethcommon.AddressEIP55 + ImportantContracts map[string]gethcommon.AddressEIP55 // map of contract name to address + TransactionPostProcessorAddress gethcommon.AddressEIP55 } func checksumFormatted(info *common.TenNetworkInfo) *ChecksumFormattedTenNetworkConfig { @@ -49,11 +49,11 @@ func checksumFormatted(info *common.TenNetworkInfo) *ChecksumFormattedTenNetwork importantContracts[name] = gethcommon.AddressEIP55(addr) } return &ChecksumFormattedTenNetworkConfig{ - ManagementContractAddress: gethcommon.AddressEIP55(info.ManagementContractAddress), - L1StartHash: info.L1StartHash, - MessageBusAddress: gethcommon.AddressEIP55(info.MessageBusAddress), - L2MessageBusAddress: gethcommon.AddressEIP55(info.L2MessageBusAddress), - ImportantContracts: importantContracts, - TransactionAnalyzerAddress: gethcommon.AddressEIP55(info.TransactionAnalyzerAddress), + ManagementContractAddress: gethcommon.AddressEIP55(info.ManagementContractAddress), + L1StartHash: info.L1StartHash, + MessageBusAddress: gethcommon.AddressEIP55(info.MessageBusAddress), + L2MessageBusAddress: gethcommon.AddressEIP55(info.L2MessageBusAddress), + ImportantContracts: importantContracts, + TransactionPostProcessorAddress: gethcommon.AddressEIP55(info.TransactionPostProcessorAddress), } } diff --git a/go/host/rpc/enclaverpc/enclave_client.go b/go/host/rpc/enclaverpc/enclave_client.go index 37aefbaeef..7f6eec328c 100644 --- a/go/host/rpc/enclaverpc/enclave_client.go +++ b/go/host/rpc/enclaverpc/enclave_client.go @@ -633,7 +633,7 @@ func (c *Client) EnclavePublicConfig(ctx context.Context) (*common.EnclavePublic return nil, syserr.NewInternalError(fmt.Errorf("%s", response.SystemError.ErrorString)) } return &common.EnclavePublicConfig{ - L2MessageBusAddress: gethcommon.BytesToAddress(response.L2MessageBusAddress), - TransactionAnalyzerAddress: gethcommon.BytesToAddress(response.TransactionAnalyzerAddress), + L2MessageBusAddress: gethcommon.BytesToAddress(response.L2MessageBusAddress), + TransactionPostProcessorAddress: gethcommon.BytesToAddress(response.TransactionPostProcessorAddress), }, nil } diff --git a/integration/simulation/p2p/in_mem_obscuro_client.go b/integration/simulation/p2p/in_mem_obscuro_client.go index ad467d48cc..4f7b192ee5 100644 --- a/integration/simulation/p2p/in_mem_obscuro_client.go +++ b/integration/simulation/p2p/in_mem_obscuro_client.go @@ -191,12 +191,12 @@ func (c *inMemTenClient) tenConfig(result interface{}) error { } tenNetworkInfo := &common.TenNetworkInfo{ - ManagementContractAddress: gethcommon.Address(cfg.ManagementContractAddress), - L1StartHash: cfg.L1StartHash, - MessageBusAddress: gethcommon.Address(cfg.MessageBusAddress), - L2MessageBusAddress: gethcommon.Address(cfg.L2MessageBusAddress), - ImportantContracts: importantContracts, - TransactionAnalyzerAddress: gethcommon.Address(cfg.TransactionAnalyzerAddress), + ManagementContractAddress: gethcommon.Address(cfg.ManagementContractAddress), + L1StartHash: cfg.L1StartHash, + MessageBusAddress: gethcommon.Address(cfg.MessageBusAddress), + L2MessageBusAddress: gethcommon.Address(cfg.L2MessageBusAddress), + ImportantContracts: importantContracts, + TransactionPostProcessorAddress: gethcommon.Address(cfg.TransactionPostProcessorAddress), } *result.(*common.TenNetworkInfo) = *tenNetworkInfo diff --git a/integration/simulation/simulation.go b/integration/simulation/simulation.go index b773079ae7..c3e1e707dc 100644 --- a/integration/simulation/simulation.go +++ b/integration/simulation/simulation.go @@ -243,7 +243,7 @@ func (s *Simulation) deployTenZen() { // Node one, because random client might yield the no p2p node, which breaks the timings rpcClient := s.RPCHandles.TenWalletClient(s.Params.Wallets.L2FaucetWallet.Address(), 1) var cfg *common.TenNetworkInfo - for cfg == nil || cfg.TransactionAnalyzerAddress.Cmp(gethcommon.Address{}) == 0 { + for cfg == nil || cfg.TransactionPostProcessorAddress.Cmp(gethcommon.Address{}) == 0 { cfg, err = rpcClient.GetConfig() if err != nil { s.TxInjector.logger.Info("failed to get config", log.ErrKey, err) @@ -280,7 +280,7 @@ func (s *Simulation) deployTenZen() { auth.Nonce = big.NewInt(0).SetUint64(NextNonce(s.ctx, s.RPCHandles, owner)) - zenBaseAddress, signedTx, _, err := ZenBase.DeployZenBase(auth, ownerRpc, cfg.TransactionAnalyzerAddress, address) //, "ZenBase", "ZEN") + zenBaseAddress, signedTx, _, err := ZenBase.DeployZenBase(auth, ownerRpc, cfg.TransactionPostProcessorAddress, address) //, "ZenBase", "ZEN") if err != nil { panic(fmt.Errorf("failed to deploy zen base contract: %w", err)) } @@ -289,7 +289,7 @@ func (s *Simulation) deployTenZen() { } s.ZenBaseAddress = zenBaseAddress - transactionsAnalyzer, err := TransactionsAnalyzer.NewTransactionsAnalyzer(cfg.TransactionAnalyzerAddress, ownerRpc) + transactionsAnalyzer, err := TransactionsAnalyzer.NewTransactionsAnalyzer(cfg.TransactionPostProcessorAddress, ownerRpc) if err != nil { panic(fmt.Errorf("failed to deploy transactions analyzer contract: %w", err)) } From a2d0a8d468502595cbe3e90d05446ebd32714a8a Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 7 Oct 2024 19:46:43 +0300 Subject: [PATCH 17/23] Added todo. --- go/common/headers.go | 1 + 1 file changed, 1 insertion(+) diff --git a/go/common/headers.go b/go/common/headers.go index 39e6c4dc42..2ad93e8ca6 100644 --- a/go/common/headers.go +++ b/go/common/headers.go @@ -48,6 +48,7 @@ type BatchHeader struct { CrossChainTree SerializedCrossChainTree `json:"crossChainTree"` // Those are the leafs of the merkle tree hashed for privacy. Necessary for clients to be able to build proofs as they have no access to all transactions in a batch or their receipts. } +// TODO - use exposed headers once #3987 is completed. func ConvertBatchHeaderToHeader(batchHeader *BatchHeader) *types.Header { var header types.Header From d7b118fe1c7771e5a6740973f84377093e00205b Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 7 Oct 2024 19:59:54 +0300 Subject: [PATCH 18/23] More PR issues addressed. --- .../generated/SystemDeployer/SystemDeployer.go | 2 +- .../TransactionPostProcessor.go | 18 +++++++++--------- contracts/generated/ZenBase/ZenBase.go | 18 +++++++++--------- contracts/src/system/Transaction.sol | 2 +- go/enclave/system/hooks.go | 15 ++++++++++++--- 5 files changed, 32 insertions(+), 23 deletions(-) diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 633baf42b5..cd475519ed 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x60806040523480156200001157600080fd5b50604051620024c6380380620024c68339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610e45806200035583390190565b61132c806200119a83390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601481527f5472616e73616374696f6e73416e616c797a6572000000000000000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea2646970667358221220555ec0015bfb515c94113040b19656e016ae167e7be92dd3381ec194c9b6453d64736f6c63430008140033608060405234801561001057600080fd5b50610e25806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063a440c3141161005b578063a440c314146101fa578063d547741f1461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806391d14854146101bb578063a217fddf146101f257600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101c9366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b610145610208366004610a03565b610548565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517f516c75100000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063516c7510906106679088908890600401610d93565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610dbb565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610dd4565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b60006101408301610bed8380610afa565b610bf78582610b0a565b50610c056020840184610b13565b610c126020860182610919565b50610c206040840184610b13565b610c2d6040860182610919565b50610c3b6060840184610b13565b610c486060860182610919565b50610c566080840184610b23565b610c636080860182610b33565b50610c7160a0840184610b13565b610c7e60a0860182610919565b50610c8c60c0840184610b3c565b85830360c0870152610c9f838284610b99565b92505050610cb060e0840184610b23565b610cbd60e0860182610b33565b50610ccc610100840184610bcc565b610cda6101008601826108cf565b50610ce9610120840184610b13565b610cf7610120860182610919565b509392505050565b6000610d0b8383610bdc565b9392505050565b6000823561013e1936849003018112610d2d57610d2d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d86578484038952610d648284610d12565b610d6e8582610cff565b94505060208201602099909901989150600101610d4d565b5091979650505050505050565b602080825281016108c7818486610d36565b634e487b7160e01b600052601160045260246000fd5b600060018201610dcd57610dcd610da5565b5060010190565b60408101610de28285610b33565b610d0b602083018461091956fea26469706673582212204a4b8ebd370b53bec98019d9bdbc05cc05f4ad0a9208d42fdfd85132ba97536664736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + Bin: "0x60806040523480156200001157600080fd5b5060405162002501380380620025018339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610e80806200035583390190565b61132c80620011d583390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601481527f5472616e73616374696f6e73416e616c797a6572000000000000000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea26469706673582212202dfb61006d9814a24fbf44035aca540ab12e4269bf66a1e65c287ebf357400a664736f6c63430008140033608060405234801561001057600080fd5b50610e60806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806364c55a9d146101bb57806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6101456101c9366004610a03565b610548565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906106679088908890600401610dce565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610df6565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610e0f565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b67ffffffffffffffff8116610890565b803561032a81610bdc565b50600061032a6020830183610bec565b67ffffffffffffffff81166108d3565b60006101408301610c288380610afa565b610c328582610b0a565b50610c406020840184610b13565b610c4d6020860182610919565b50610c5b6040840184610b13565b610c686040860182610919565b50610c766060840184610b13565b610c836060860182610919565b50610c916080840184610b23565b610c9e6080860182610b33565b50610cac60a0840184610b13565b610cb960a0860182610919565b50610cc760c0840184610b3c565b85830360c0870152610cda838284610b99565b92505050610ceb60e0840184610b23565b610cf860e0860182610b33565b50610d07610100840184610bcc565b610d156101008601826108cf565b50610d24610120840184610bf7565b610d32610120860182610c07565b509392505050565b6000610d468383610c17565b9392505050565b6000823561013e1936849003018112610d6857610d68600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610dc1578484038952610d9f8284610d4d565b610da98582610d3a565b94505060208201602099909901989150600101610d88565b5091979650505050505050565b602080825281016108c7818486610d71565b634e487b7160e01b600052601160045260246000fd5b600060018201610e0857610e08610de0565b5060010190565b60408101610e1d8285610b33565b610d46602083018461091956fea2646970667358221220422c13cdc037b4b963eaaac39cfada9a0329d6983c908bc2e2ded1878aa18b8d64736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go b/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go index 97b3718420..38ca4303c2 100644 --- a/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go +++ b/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go @@ -40,13 +40,13 @@ type StructsTransaction struct { Data []byte From common.Address Successful bool - GasUsed *big.Int + GasUsed uint64 } // TransactionPostProcessorMetaData contains all meta data concerning the TransactionPostProcessor contract. var TransactionPostProcessorMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionsLength\",\"type\":\"uint256\"}],\"name\":\"TransactionsConverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610e25806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063a440c3141161005b578063a440c314146101fa578063d547741f1461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806391d14854146101bb578063a217fddf146101f257600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6100ec6101c9366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b610145610208366004610a03565b610548565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517f516c75100000000000000000000000000000000000000000000000000000000081526001600160a01b039091169150819063516c7510906106679088908890600401610d93565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610dbb565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610dd4565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b60006101408301610bed8380610afa565b610bf78582610b0a565b50610c056020840184610b13565b610c126020860182610919565b50610c206040840184610b13565b610c2d6040860182610919565b50610c3b6060840184610b13565b610c486060860182610919565b50610c566080840184610b23565b610c636080860182610b33565b50610c7160a0840184610b13565b610c7e60a0860182610919565b50610c8c60c0840184610b3c565b85830360c0870152610c9f838284610b99565b92505050610cb060e0840184610b23565b610cbd60e0860182610b33565b50610ccc610100840184610bcc565b610cda6101008601826108cf565b50610ce9610120840184610b13565b610cf7610120860182610919565b509392505050565b6000610d0b8383610bdc565b9392505050565b6000823561013e1936849003018112610d2d57610d2d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d86578484038952610d648284610d12565b610d6e8582610cff565b94505060208201602099909901989150600101610d4d565b5091979650505050505050565b602080825281016108c7818486610d36565b634e487b7160e01b600052601160045260246000fd5b600060018201610dcd57610dcd610da5565b5060010190565b60408101610de28285610b33565b610d0b602083018461091956fea26469706673582212204a4b8ebd370b53bec98019d9bdbc05cc05f4ad0a9208d42fdfd85132ba97536664736f6c63430008140033", + ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionsLength\",\"type\":\"uint256\"}],\"name\":\"TransactionsConverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"gasUsed\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50610e60806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806364c55a9d146101bb57806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6101456101c9366004610a03565b610548565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906106679088908890600401610dce565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610df6565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610e0f565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b67ffffffffffffffff8116610890565b803561032a81610bdc565b50600061032a6020830183610bec565b67ffffffffffffffff81166108d3565b60006101408301610c288380610afa565b610c328582610b0a565b50610c406020840184610b13565b610c4d6020860182610919565b50610c5b6040840184610b13565b610c686040860182610919565b50610c766060840184610b13565b610c836060860182610919565b50610c916080840184610b23565b610c9e6080860182610b33565b50610cac60a0840184610b13565b610cb960a0860182610919565b50610cc760c0840184610b3c565b85830360c0870152610cda838284610b99565b92505050610ceb60e0840184610b23565b610cf860e0860182610b33565b50610d07610100840184610bcc565b610d156101008601826108cf565b50610d24610120840184610bf7565b610d32610120860182610c07565b509392505050565b6000610d468383610c17565b9392505050565b6000823561013e1936849003018112610d6857610d68600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610dc1578484038952610d9f8284610d4d565b610da98582610d3a565b94505060208201602099909901989150600101610d88565b5091979650505050505050565b602080825281016108c7818486610d71565b634e487b7160e01b600052601160045260246000fd5b600060018201610e0857610e08610de0565b5060010190565b60408101610e1d8285610b33565b610d46602083018461091956fea2646970667358221220422c13cdc037b4b963eaaac39cfada9a0329d6983c908bc2e2ded1878aa18b8d64736f6c63430008140033", } // TransactionPostProcessorABI is the input ABI used to generate the binding from. @@ -465,23 +465,23 @@ func (_TransactionPostProcessor *TransactionPostProcessorTransactorSession) Init return _TransactionPostProcessor.Contract.Initialize(&_TransactionPostProcessor.TransactOpts, eoaAdmin, authorizedCaller) } -// OnBlock is a paid mutator transaction binding the contract method 0xa440c314. +// OnBlock is a paid mutator transaction binding the contract method 0x64c55a9d. // -// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint256)[] transactions) returns() +// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint64)[] transactions) returns() func (_TransactionPostProcessor *TransactionPostProcessorTransactor) OnBlock(opts *bind.TransactOpts, transactions []StructsTransaction) (*types.Transaction, error) { return _TransactionPostProcessor.contract.Transact(opts, "onBlock", transactions) } -// OnBlock is a paid mutator transaction binding the contract method 0xa440c314. +// OnBlock is a paid mutator transaction binding the contract method 0x64c55a9d. // -// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint256)[] transactions) returns() +// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint64)[] transactions) returns() func (_TransactionPostProcessor *TransactionPostProcessorSession) OnBlock(transactions []StructsTransaction) (*types.Transaction, error) { return _TransactionPostProcessor.Contract.OnBlock(&_TransactionPostProcessor.TransactOpts, transactions) } -// OnBlock is a paid mutator transaction binding the contract method 0xa440c314. +// OnBlock is a paid mutator transaction binding the contract method 0x64c55a9d. // -// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint256)[] transactions) returns() +// Solidity: function onBlock((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint64)[] transactions) returns() func (_TransactionPostProcessor *TransactionPostProcessorTransactorSession) OnBlock(transactions []StructsTransaction) (*types.Transaction, error) { return _TransactionPostProcessor.Contract.OnBlock(&_TransactionPostProcessor.TransactOpts, transactions) } diff --git a/contracts/generated/ZenBase/ZenBase.go b/contracts/generated/ZenBase/ZenBase.go index 2eee7d3f8d..97361557c5 100644 --- a/contracts/generated/ZenBase/ZenBase.go +++ b/contracts/generated/ZenBase/ZenBase.go @@ -40,13 +40,13 @@ type StructsTransaction struct { Data []byte From common.Address Successful bool - GasUsed *big.Int + GasUsed uint64 } // ZenBaseMetaData contains all meta data concerning the ZenBase contract. var ZenBaseMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionPostProcessor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"transactionDecoder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162001205380380620012058339810160408190526200003491620001e2565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e919062000333565b5060046200008d828262000333565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd919062000410565b60405180910390fd5b620000d18162000156565b506001600160a01b038216620000fb5760405162461bcd60e51b8152600401620000bd9062000461565b6001600160a01b038116620001245760405162461bcd60e51b8152600401620000bd90620004b2565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055620004c4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001c681620001a8565b8114620001d257600080fd5b50565b8051620001b581620001bb565b60008060408385031215620001fa57620001fa600080fd5b6000620002088585620001d5565b92505060206200021b85828601620001d5565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200026657607f821691505b6020821081036200027b576200027b6200023b565b50919050565b6000620001b56200028f8381565b90565b6200029d8362000281565b815460001960089490940293841b1916921b91909117905550565b6000620002c781848462000292565b505050565b81811015620002eb57620002e2600082620002b8565b600101620002cc565b5050565b601f821115620002c7576000818152602090206020601f85010481016020851015620003185750805b6200032c6020601f860104830182620002cc565b5050505050565b81516001600160401b038111156200034f576200034f62000225565b6200035b825462000251565b62000368828285620002ef565b506020601f821160018114620003a05760008315620003875750848201515b600019600885021c19811660028502178555506200032c565b600084815260208120601f198516915b82811015620003d25787850151825560209485019460019092019101620003b0565b5084821015620003f05783870151600019601f87166008021c191681555b50505050600202600101905550565b6200040a81620001a8565b82525050565b60208101620001b58284620003ff565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164648152637265737360e01b602082015290505b60400190565b60208082528101620001b58162000420565b60238152602081017f496e76616c6964207472616e73616374696f6e206465636f646572206164647281526265737360e81b602082015290506200045b565b60208082528101620001b58162000473565b610d3180620004d46000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c57806395d89b411161006657806395d89b41146101b4578063a9059cbb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b806370a082311461016a578063715018a6146101935780638da5cb5b1461019b57600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce56714610146578063516c75101461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610168610163366004610a8a565b6102ed565b005b610126610178366004610ad2565b6001600160a01b031660009081526020819052604090205490565b610168610412565b6005546001600160a01b03166040516100f99190610b04565b6100ec610426565b6101156101ca366004610968565b610435565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610168610216366004610ad2565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6006546001600160a01b031633146103205760405162461bcd60e51b815260040161031790610b87565b60405180910390fd5b60008190036103415760405162461bcd60e51b815260040161031790610be8565b60005b8181101561040d5761038c83838381811061036157610361610c23565b90506020028101906103739190610c39565b6103859061010081019060e001610ad2565b60016105a3565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103bf576103bf610c23565b90506020028101906103d19190610c39565b6103e39061010081019060e001610ad2565b60016040516103f3929190610c76565b60405180910390a18061040581610ca7565b915050610344565b505050565b61041a6105dd565b6104246000610623565b565b60606004805461022a90610b5b565b6000336102bb81858561052b565b61044b6105dd565b6001600160a01b03811661048e5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103179190610b04565b61049781610623565b50565b61040d838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161031793929190610cc0565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103179190610b04565b6001600160a01b03821661059857600060405163ec442f0560e01b81526004016103179190610b04565b61040d838383610792565b6001600160a01b0382166105cd57600060405163ec442f0560e01b81526004016103179190610b04565b6105d960008383610792565b5050565b6005546001600160a01b0316331461042457336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103179190610b04565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384166106d05760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016103179190610b04565b6001600160a01b0383166107135760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016103179190610b04565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce8565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161031793929190610cc0565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b60008083601f840112610a4d57610a4d600080fd5b50813567ffffffffffffffff811115610a6857610a68600080fd5b602083019150836020820283011115610a8357610a83600080fd5b9250929050565b60008060208385031215610aa057610aa0600080fd5b823567ffffffffffffffff811115610aba57610aba600080fd5b610ac685828601610a38565b92509250509250929050565b600060208284031215610ae757610ae7600080fd5b6000610af3848461094c565b949350505050565b6109a981610927565b602081016102c18284610afb565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1936849003018112610c5457610c54600080fd5b9190910192915050565b60006102c1610c6a8381565b90565b6109a981610c5e565b60408101610c848285610afb565b6102e66020830184610c6d565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb957610cb9610c91565b5060010190565b60608101610cce8286610afb565b610cdb60208301856109bd565b610af360408301846109bd565b808201808211156102c1576102c1610c9156fea2646970667358221220d1e4c8a1a9939ba9b9221b70ef13ea7a91ec9bbb2d142b6f613a67a070c8bbd564736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionPostProcessor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"transactionDecoder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"gasUsed\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162001205380380620012058339810160408190526200003491620001e2565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e919062000333565b5060046200008d828262000333565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd919062000410565b60405180910390fd5b620000d18162000156565b506001600160a01b038216620000fb5760405162461bcd60e51b8152600401620000bd9062000461565b6001600160a01b038116620001245760405162461bcd60e51b8152600401620000bd90620004b2565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055620004c4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001c681620001a8565b8114620001d257600080fd5b50565b8051620001b581620001bb565b60008060408385031215620001fa57620001fa600080fd5b6000620002088585620001d5565b92505060206200021b85828601620001d5565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200026657607f821691505b6020821081036200027b576200027b6200023b565b50919050565b6000620001b56200028f8381565b90565b6200029d8362000281565b815460001960089490940293841b1916921b91909117905550565b6000620002c781848462000292565b505050565b81811015620002eb57620002e2600082620002b8565b600101620002cc565b5050565b601f821115620002c7576000818152602090206020601f85010481016020851015620003185750805b6200032c6020601f860104830182620002cc565b5050505050565b81516001600160401b038111156200034f576200034f62000225565b6200035b825462000251565b62000368828285620002ef565b506020601f821160018114620003a05760008315620003875750848201515b600019600885021c19811660028502178555506200032c565b600084815260208120601f198516915b82811015620003d25787850151825560209485019460019092019101620003b0565b5084821015620003f05783870151600019601f87166008021c191681555b50505050600202600101905550565b6200040a81620001a8565b82525050565b60208101620001b58284620003ff565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164648152637265737360e01b602082015290505b60400190565b60208082528101620001b58162000420565b60238152602081017f496e76616c6964207472616e73616374696f6e206465636f646572206164647281526265737360e81b602082015290506200045b565b60208082528101620001b58162000473565b610d3180620004d46000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c5780639f9976af116100665780639f9976af146101a9578063a9059cbb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610126610163366004610a38565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a6a565b6100ec610301565b6101866101b7366004610aca565b610310565b6101156101ca366004610968565b610435565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a38565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6102f56105a3565b6102ff60006105e9565b565b60606004805461022a90610b5b565b6006546001600160a01b031633146103435760405162461bcd60e51b815260040161033a90610b87565b60405180910390fd5b60008190036103645760405162461bcd60e51b815260040161033a90610be8565b60005b81811015610430576103af83838381811061038457610384610c23565b90506020028101906103969190610c39565b6103a89061010081019060e001610a38565b6001610653565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103e2576103e2610c23565b90506020028101906103f49190610c39565b6104069061010081019060e001610a38565b6001604051610416929190610c76565b60405180910390a18061042881610ca7565b915050610367565b505050565b6000336102bb81858561052b565b61044b6105a3565b6001600160a01b03811661048e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b610497816105e9565b50565b610430838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161033a93929190610cc0565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b03821661059857600060405163ec442f0560e01b815260040161033a9190610a6a565b610430838383610792565b6005546001600160a01b031633146102ff57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067d57600060405163ec442f0560e01b815260040161033a9190610a6a565b61068960008383610792565b5050565b6001600160a01b0384166106d05760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b0383166107135760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce8565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161033a93929190610cc0565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b600060208284031215610a4d57610a4d600080fd5b6000610a59848461094c565b949350505050565b6109a981610927565b602081016102c18284610a61565b60008083601f840112610a8d57610a8d600080fd5b50813567ffffffffffffffff811115610aa857610aa8600080fd5b602083019150836020820283011115610ac357610ac3600080fd5b9250929050565b60008060208385031215610ae057610ae0600080fd5b823567ffffffffffffffff811115610afa57610afa600080fd5b610b0685828601610a78565b92509250509250929050565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1936849003018112610c5457610c54600080fd5b9190910192915050565b60006102c1610c6a8381565b90565b6109a981610c5e565b60408101610c848285610a61565b6102e66020830184610c6d565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb957610cb9610c91565b5060010190565b60608101610cce8286610a61565b610cdb60208301856109bd565b610a5960408301846109bd565b808201808211156102c1576102c1610c9156fea2646970667358221220d63c10873d835a1e945a1a99a4407630eb7252a1288c2492ce8c551ac08a1bfb64736f6c63430008140033", } // ZenBaseABI is the input ABI used to generate the binding from. @@ -454,23 +454,23 @@ func (_ZenBase *ZenBaseTransactorSession) Approve(spender common.Address, value return _ZenBase.Contract.Approve(&_ZenBase.TransactOpts, spender, value) } -// OnBlockEnd is a paid mutator transaction binding the contract method 0x516c7510. +// OnBlockEnd is a paid mutator transaction binding the contract method 0x9f9976af. // -// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint256)[] transactions) returns() +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint64)[] transactions) returns() func (_ZenBase *ZenBaseTransactor) OnBlockEnd(opts *bind.TransactOpts, transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.contract.Transact(opts, "onBlockEnd", transactions) } -// OnBlockEnd is a paid mutator transaction binding the contract method 0x516c7510. +// OnBlockEnd is a paid mutator transaction binding the contract method 0x9f9976af. // -// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint256)[] transactions) returns() +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint64)[] transactions) returns() func (_ZenBase *ZenBaseSession) OnBlockEnd(transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.Contract.OnBlockEnd(&_ZenBase.TransactOpts, transactions) } -// OnBlockEnd is a paid mutator transaction binding the contract method 0x516c7510. +// OnBlockEnd is a paid mutator transaction binding the contract method 0x9f9976af. // -// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint256)[] transactions) returns() +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint64)[] transactions) returns() func (_ZenBase *ZenBaseTransactorSession) OnBlockEnd(transactions []StructsTransaction) (*types.Transaction, error) { return _ZenBase.Contract.OnBlockEnd(&_ZenBase.TransactOpts, transactions) } diff --git a/contracts/src/system/Transaction.sol b/contracts/src/system/Transaction.sol index 2e5577a85e..d8ed4f1206 100644 --- a/contracts/src/system/Transaction.sol +++ b/contracts/src/system/Transaction.sol @@ -13,6 +13,6 @@ library Structs { bytes data; address from; bool successful; - uint256 gasUsed; + uint64 gasUsed; } } \ No newline at end of file diff --git a/go/enclave/system/hooks.go b/go/enclave/system/hooks.go index dd7cb1cf86..da8f2f207a 100644 --- a/go/enclave/system/hooks.go +++ b/go/enclave/system/hooks.go @@ -140,9 +140,17 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex solidityTransactions := make([]TransactionPostProcessor.StructsTransaction, 0) - txSuccessMap := map[gethcommon.Hash]bool{} + type statusWithGasUsed struct { + status bool + gasUsed uint64 + } + + txSuccessMap := map[gethcommon.Hash]statusWithGasUsed{} for _, receipt := range receipts { - txSuccessMap[receipt.TxHash] = receipt.Status == types.ReceiptStatusSuccessful + txSuccessMap[receipt.TxHash] = statusWithGasUsed{ + status: receipt.Status == types.ReceiptStatusSuccessful, + gasUsed: receipt.GasUsed, + } } for _, tx := range transactions { @@ -153,7 +161,8 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex GasLimit: big.NewInt(int64(tx.Gas())), Value: tx.Value(), Data: tx.Data(), - Successful: txSuccessMap[tx.Hash()], + Successful: txSuccessMap[tx.Hash()].status, + GasUsed: txSuccessMap[tx.Hash()].gasUsed, } if tx.To() != nil { transaction.To = *tx.To() From 0e44e32df8037799324baada2679c2487c86851a Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 7 Oct 2024 20:03:07 +0300 Subject: [PATCH 19/23] More renammings somehow missed. --- contracts/src/system/SystemDeployer.sol | 8 +++---- go/enclave/system/hooks.go | 30 ++++++++++++------------- integration/simulation/simulation.go | 7 +++--- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/contracts/src/system/SystemDeployer.sol b/contracts/src/system/SystemDeployer.sol index 6f8008b22b..c7d16cb3a0 100644 --- a/contracts/src/system/SystemDeployer.sol +++ b/contracts/src/system/SystemDeployer.sol @@ -12,11 +12,11 @@ contract SystemDeployer { } function deployAnalyzer(address eoaAdmin) internal { - TransactionPostProcessor transactionsAnalyzer = new TransactionPostProcessor(); - bytes memory callData = abi.encodeWithSelector(transactionsAnalyzer.initialize.selector, eoaAdmin, msg.sender); - address transactionsAnalyzerProxy = deployProxy(address(transactionsAnalyzer), eoaAdmin, callData); + TransactionPostProcessor transactionsPostProcessor = new TransactionPostProcessor(); + bytes memory callData = abi.encodeWithSelector(transactionsPostProcessor.initialize.selector, eoaAdmin, msg.sender); + address transactionsPostProcessorProxy = deployProxy(address(transactionsPostProcessor), eoaAdmin, callData); - emit SystemContractDeployed("TransactionsAnalyzer", transactionsAnalyzerProxy); + emit SystemContractDeployed("TransactionsPostProcessor", transactionsPostProcessorProxy); } function deployProxy(address _logic, address _admin, bytes memory _data) internal returns (address proxyAddress) { diff --git a/go/enclave/system/hooks.go b/go/enclave/system/hooks.go index da8f2f207a..132f427a97 100644 --- a/go/enclave/system/hooks.go +++ b/go/enclave/system/hooks.go @@ -34,24 +34,24 @@ type SystemContractCallbacks interface { } type systemContractCallbacks struct { - transactionsAnalyzerAddress *gethcommon.Address - ownerWallet wallet.Wallet - storage storage.Storage + transactionsPostProcessorAddress *gethcommon.Address + ownerWallet wallet.Wallet + storage storage.Storage logger gethlog.Logger } func NewSystemContractCallbacks(ownerWallet wallet.Wallet, logger gethlog.Logger) SystemContractCallbacks { return &systemContractCallbacks{ - transactionsAnalyzerAddress: nil, - ownerWallet: ownerWallet, - logger: logger, - storage: nil, + transactionsPostProcessorAddress: nil, + ownerWallet: ownerWallet, + logger: logger, + storage: nil, } } func (s *systemContractCallbacks) TransactionPostProcessor() *gethcommon.Address { - return s.transactionsAnalyzerAddress + return s.transactionsPostProcessorAddress } func (s *systemContractCallbacks) GetOwner() gethcommon.Address { @@ -95,11 +95,11 @@ func (s *systemContractCallbacks) Load() error { } func (s *systemContractCallbacks) initializeRequiredAddresses(addresses SystemContractAddresses) error { - if addresses["TransactionsAnalyzer"] == nil { - return fmt.Errorf("required contract address TransactionsAnalyzer is nil") + if addresses["TransactionsPostProcessor"] == nil { + return fmt.Errorf("required contract address TransactionsPostProcessor is nil") } - s.transactionsAnalyzerAddress = addresses["TransactionsAnalyzer"] + s.transactionsPostProcessorAddress = addresses["TransactionsPostProcessor"] return nil } @@ -125,8 +125,8 @@ func (s *systemContractCallbacks) Initialize(batch *core.Batch, receipts types.R } func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Context, l2State *state.StateDB, transactions common.L2Transactions, receipts types.Receipts) (*types.Transaction, error) { - if s.transactionsAnalyzerAddress == nil { - s.logger.Debug("CreateOnBatchEndTransaction: TransactionsAnalyzerAddress is nil, skipping transaction creation") + if s.transactionsPostProcessorAddress == nil { + s.logger.Debug("CreateOnBatchEndTransaction: TransactionsPostProcessorAddress is nil, skipping transaction creation") return nil, nil } @@ -193,10 +193,10 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex Gas: 500_000_000, GasPrice: gethcommon.Big0, // Synthetic transactions are on the house. Or the house. Data: data, - To: s.transactionsAnalyzerAddress, + To: s.transactionsPostProcessorAddress, } - s.logger.Debug("CreateOnBatchEndTransaction: Signing transaction", "to", s.transactionsAnalyzerAddress.Hex(), "nonce", nonceForSyntheticTx) + s.logger.Debug("CreateOnBatchEndTransaction: Signing transaction", "to", s.transactionsPostProcessorAddress.Hex(), "nonce", nonceForSyntheticTx) signedTx, err := s.ownerWallet.SignTransaction(tx) if err != nil { s.logger.Error("CreateOnBatchEndTransaction: Failed signing transaction", "error", err) diff --git a/integration/simulation/simulation.go b/integration/simulation/simulation.go index c3e1e707dc..ee1a2ecdbf 100644 --- a/integration/simulation/simulation.go +++ b/integration/simulation/simulation.go @@ -13,8 +13,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" gethparams "github.com/ethereum/go-ethereum/params" "github.com/ten-protocol/go-ten/contracts/generated/MessageBus" - "github.com/ten-protocol/go-ten/contracts/generated/Structs" - "github.com/ten-protocol/go-ten/contracts/generated/TransactionsAnalyzer" + "github.com/ten-protocol/go-ten/contracts/generated/TransactionPostProcessor" "github.com/ten-protocol/go-ten/contracts/generated/ZenBase" "github.com/ten-protocol/go-ten/go/common" "github.com/ten-protocol/go-ten/go/common/errutil" @@ -289,13 +288,13 @@ func (s *Simulation) deployTenZen() { } s.ZenBaseAddress = zenBaseAddress - transactionsAnalyzer, err := TransactionsAnalyzer.NewTransactionsAnalyzer(cfg.TransactionPostProcessorAddress, ownerRpc) + transactionPostProcessor, err := TransactionPostProcessor.NewTransactionPostProcessor(cfg.TransactionPostProcessorAddress, ownerRpc) if err != nil { panic(fmt.Errorf("failed to deploy transactions analyzer contract: %w", err)) } auth.Nonce = big.NewInt(0).SetUint64(NextNonce(s.ctx, s.RPCHandles, owner)) - tx, err := transactionsAnalyzer.AddOnBlockEndCallback(auth, zenBaseAddress) + tx, err := transactionPostProcessor.AddOnBlockEndCallback(auth, zenBaseAddress) if err != nil { panic(fmt.Errorf("failed to add on block end callback: %w", err)) } From 382004218a4ba09da0af6710b4b98f0c97863892 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Mon, 7 Oct 2024 20:05:27 +0300 Subject: [PATCH 20/23] Compilation fixes. --- .../generated/SystemDeployer/SystemDeployer.go | 2 +- contracts/generated/ZenBase/ZenBase.go | 8 ++++---- contracts/src/zen/ZenBase.sol | 5 +---- integration/simulation/simulation.go | 18 +++--------------- 4 files changed, 9 insertions(+), 24 deletions(-) diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index cd475519ed..409fb10f95 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162002501380380620025018339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610e80806200035583390190565b61132c80620011d583390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601481527f5472616e73616374696f6e73416e616c797a6572000000000000000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea26469706673582212202dfb61006d9814a24fbf44035aca540ab12e4269bf66a1e65c287ebf357400a664736f6c63430008140033608060405234801561001057600080fd5b50610e60806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806364c55a9d146101bb57806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6101456101c9366004610a03565b610548565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906106679088908890600401610dce565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610df6565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610e0f565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b67ffffffffffffffff8116610890565b803561032a81610bdc565b50600061032a6020830183610bec565b67ffffffffffffffff81166108d3565b60006101408301610c288380610afa565b610c328582610b0a565b50610c406020840184610b13565b610c4d6020860182610919565b50610c5b6040840184610b13565b610c686040860182610919565b50610c766060840184610b13565b610c836060860182610919565b50610c916080840184610b23565b610c9e6080860182610b33565b50610cac60a0840184610b13565b610cb960a0860182610919565b50610cc760c0840184610b3c565b85830360c0870152610cda838284610b99565b92505050610ceb60e0840184610b23565b610cf860e0860182610b33565b50610d07610100840184610bcc565b610d156101008601826108cf565b50610d24610120840184610bf7565b610d32610120860182610c07565b509392505050565b6000610d468383610c17565b9392505050565b6000823561013e1936849003018112610d6857610d68600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610dc1578484038952610d9f8284610d4d565b610da98582610d3a565b94505060208201602099909901989150600101610d88565b5091979650505050505050565b602080825281016108c7818486610d71565b634e487b7160e01b600052601160045260246000fd5b600060018201610e0857610e08610de0565b5060010190565b60408101610e1d8285610b33565b610d46602083018461091956fea2646970667358221220422c13cdc037b4b963eaaac39cfada9a0329d6983c908bc2e2ded1878aa18b8d64736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + Bin: "0x60806040523480156200001157600080fd5b5060405162002501380380620025018339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610e80806200035583390190565b61132c80620011d583390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601981527f5472616e73616374696f6e73506f737450726f636573736f7200000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea26469706673582212207e8bb5b3c5325287132cce12bf7e7ef8424da2013b4cd11d016fe18cfebebefd64736f6c63430008140033608060405234801561001057600080fd5b50610e60806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806364c55a9d146101bb57806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6101456101c9366004610a03565b610548565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906106679088908890600401610dce565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610df6565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610e0f565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b67ffffffffffffffff8116610890565b803561032a81610bdc565b50600061032a6020830183610bec565b67ffffffffffffffff81166108d3565b60006101408301610c288380610afa565b610c328582610b0a565b50610c406020840184610b13565b610c4d6020860182610919565b50610c5b6040840184610b13565b610c686040860182610919565b50610c766060840184610b13565b610c836060860182610919565b50610c916080840184610b23565b610c9e6080860182610b33565b50610cac60a0840184610b13565b610cb960a0860182610919565b50610cc760c0840184610b3c565b85830360c0870152610cda838284610b99565b92505050610ceb60e0840184610b23565b610cf860e0860182610b33565b50610d07610100840184610bcc565b610d156101008601826108cf565b50610d24610120840184610bf7565b610d32610120860182610c07565b509392505050565b6000610d468383610c17565b9392505050565b6000823561013e1936849003018112610d6857610d68600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610dc1578484038952610d9f8284610d4d565b610da98582610d3a565b94505060208201602099909901989150600101610d88565b5091979650505050505050565b602080825281016108c7818486610d71565b634e487b7160e01b600052601160045260246000fd5b600060018201610e0857610e08610de0565b5060010190565b60408101610e1d8285610b33565b610d46602083018461091956fea2646970667358221220422c13cdc037b4b963eaaac39cfada9a0329d6983c908bc2e2ded1878aa18b8d64736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ZenBase/ZenBase.go b/contracts/generated/ZenBase/ZenBase.go index 97361557c5..9716732fa9 100644 --- a/contracts/generated/ZenBase/ZenBase.go +++ b/contracts/generated/ZenBase/ZenBase.go @@ -45,8 +45,8 @@ type StructsTransaction struct { // ZenBaseMetaData contains all meta data concerning the ZenBase contract. var ZenBaseMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionPostProcessor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"transactionDecoder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"gasUsed\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162001205380380620012058339810160408190526200003491620001e2565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e919062000333565b5060046200008d828262000333565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd919062000410565b60405180910390fd5b620000d18162000156565b506001600160a01b038216620000fb5760405162461bcd60e51b8152600401620000bd9062000461565b6001600160a01b038116620001245760405162461bcd60e51b8152600401620000bd90620004b2565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055620004c4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001c681620001a8565b8114620001d257600080fd5b50565b8051620001b581620001bb565b60008060408385031215620001fa57620001fa600080fd5b6000620002088585620001d5565b92505060206200021b85828601620001d5565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200026657607f821691505b6020821081036200027b576200027b6200023b565b50919050565b6000620001b56200028f8381565b90565b6200029d8362000281565b815460001960089490940293841b1916921b91909117905550565b6000620002c781848462000292565b505050565b81811015620002eb57620002e2600082620002b8565b600101620002cc565b5050565b601f821115620002c7576000818152602090206020601f85010481016020851015620003185750805b6200032c6020601f860104830182620002cc565b5050505050565b81516001600160401b038111156200034f576200034f62000225565b6200035b825462000251565b62000368828285620002ef565b506020601f821160018114620003a05760008315620003875750848201515b600019600885021c19811660028502178555506200032c565b600084815260208120601f198516915b82811015620003d25787850151825560209485019460019092019101620003b0565b5084821015620003f05783870151600019601f87166008021c191681555b50505050600202600101905550565b6200040a81620001a8565b82525050565b60208101620001b58284620003ff565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164648152637265737360e01b602082015290505b60400190565b60208082528101620001b58162000420565b60238152602081017f496e76616c6964207472616e73616374696f6e206465636f646572206164647281526265737360e81b602082015290506200045b565b60208082528101620001b58162000473565b610d3180620004d46000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c5780639f9976af116100665780639f9976af146101a9578063a9059cbb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610126610163366004610a38565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a6a565b6100ec610301565b6101866101b7366004610aca565b610310565b6101156101ca366004610968565b610435565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a38565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6102f56105a3565b6102ff60006105e9565b565b60606004805461022a90610b5b565b6006546001600160a01b031633146103435760405162461bcd60e51b815260040161033a90610b87565b60405180910390fd5b60008190036103645760405162461bcd60e51b815260040161033a90610be8565b60005b81811015610430576103af83838381811061038457610384610c23565b90506020028101906103969190610c39565b6103a89061010081019060e001610a38565b6001610653565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103e2576103e2610c23565b90506020028101906103f49190610c39565b6104069061010081019060e001610a38565b6001604051610416929190610c76565b60405180910390a18061042881610ca7565b915050610367565b505050565b6000336102bb81858561052b565b61044b6105a3565b6001600160a01b03811661048e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b610497816105e9565b50565b610430838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161033a93929190610cc0565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b03821661059857600060405163ec442f0560e01b815260040161033a9190610a6a565b610430838383610792565b6005546001600160a01b031633146102ff57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067d57600060405163ec442f0560e01b815260040161033a9190610a6a565b61068960008383610792565b5050565b6001600160a01b0384166106d05760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b0383166107135760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce8565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161033a93929190610cc0565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b600060208284031215610a4d57610a4d600080fd5b6000610a59848461094c565b949350505050565b6109a981610927565b602081016102c18284610a61565b60008083601f840112610a8d57610a8d600080fd5b50813567ffffffffffffffff811115610aa857610aa8600080fd5b602083019150836020820283011115610ac357610ac3600080fd5b9250929050565b60008060208385031215610ae057610ae0600080fd5b823567ffffffffffffffff811115610afa57610afa600080fd5b610b0685828601610a78565b92509250509250929050565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1936849003018112610c5457610c54600080fd5b9190910192915050565b60006102c1610c6a8381565b90565b6109a981610c5e565b60408101610c848285610a61565b6102e66020830184610c6d565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb957610cb9610c91565b5060010190565b60608101610cce8286610a61565b610cdb60208301856109bd565b610a5960408301846109bd565b808201808211156102c1576102c1610c9156fea2646970667358221220d63c10873d835a1e945a1a99a4407630eb7252a1288c2492ce8c551ac08a1bfb64736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionPostProcessor\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"gasUsed\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b506040516200115f3803806200115f8339810160408190526200003491620001ad565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b81525081600390816200007e9190620002e8565b5060046200008d8282620002e8565b5050506001600160a01b038116620000c6576000604051631e4fbdf760e01b8152600401620000bd9190620003c5565b60405180910390fd5b620000d18162000121565b506001600160a01b038116620000fb5760405162461bcd60e51b8152600401620000bd90620003d5565b600680546001600160a01b0319166001600160a01b03929092169190911790556200041e565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b620001918162000173565b81146200019d57600080fd5b50565b8051620001808162000186565b600060208284031215620001c457620001c4600080fd5b6000620001d28484620001a0565b949350505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200021b57607f821691505b602082108103620002305762000230620001f0565b50919050565b600062000180620002448381565b90565b620002528362000236565b815460001960089490940293841b1916921b91909117905550565b60006200027c81848462000247565b505050565b81811015620002a057620002976000826200026d565b60010162000281565b5050565b601f8211156200027c576000818152602090206020601f85010481016020851015620002cd5750805b620002e16020601f86010483018262000281565b5050505050565b81516001600160401b03811115620003045762000304620001da565b62000310825462000206565b6200031d828285620002a4565b506020601f8211600181146200035557600083156200033c5750848201515b600019600885021c1981166002850217855550620002e1565b600084815260208120601f198516915b8281101562000387578785015182556020948501946001909201910162000365565b5084821015620003a55783870151600019601f87166008021c191681555b50505050600202600101905550565b620003bf8162000173565b82525050565b60208101620001808284620003b4565b602080825281016200018081602481527f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164646020820152637265737360e01b604082015260600190565b610d31806200042e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c5780639f9976af116100665780639f9976af146101a9578063a9059cbb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f99190610916565b60405180910390f35b610115610110366004610968565b6102ad565b6040516100f991906109af565b6002545b6040516100f991906109c3565b6101156101413660046109d1565b6102c7565b60126040516100f99190610a2a565b610126610163366004610a38565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a6a565b6100ec610301565b6101866101b7366004610aca565b610310565b6101156101ca366004610968565b610435565b6101266101dd366004610b12565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a38565b610443565b60606003805461022a90610b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b5b565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561049a565b60019150505b92915050565b6000336102d58582856104a7565b6102e085858561052b565b60019150505b9392505050565b6102f56105a3565b6102ff60006105e9565b565b60606004805461022a90610b5b565b6006546001600160a01b031633146103435760405162461bcd60e51b815260040161033a90610b87565b60405180910390fd5b60008190036103645760405162461bcd60e51b815260040161033a90610be8565b60005b81811015610430576103af83838381811061038457610384610c23565b90506020028101906103969190610c39565b6103a89061010081019060e001610a38565b6001610653565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103e2576103e2610c23565b90506020028101906103f49190610c39565b6104069061010081019060e001610a38565b6001604051610416929190610c76565b60405180910390a18061042881610ca7565b915050610367565b505050565b6000336102bb81858561052b565b61044b6105a3565b6001600160a01b03811661048e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b610497816105e9565b50565b610430838383600161068d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105255781811015610516578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161033a93929190610cc0565b6105258484848403600061068d565b50505050565b6001600160a01b03831661056e5760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b03821661059857600060405163ec442f0560e01b815260040161033a9190610a6a565b610430838383610792565b6005546001600160a01b031633146102ff57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067d57600060405163ec442f0560e01b815260040161033a9190610a6a565b61068960008383610792565b5050565b6001600160a01b0384166106d05760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b0383166107135760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161033a9190610a6a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561052557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161078491906109c3565b60405180910390a350505050565b6001600160a01b0383166107bd5780600260008282546107b29190610ce8565b909155506108359050565b6001600160a01b03831660009081526020819052604090205481811015610816578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161033a93929190610cc0565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661085157600280548290039055610870565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b391906109c3565b60405180910390a3505050565b60005b838110156108db5781810151838201526020016108c3565b50506000910152565b60006108ee825190565b8084526020840193506109058185602086016108c0565b601f01601f19169290920192915050565b602080825281016102e681846108e4565b60006001600160a01b0382166102c1565b61094181610927565b811461049757600080fd5b80356102c181610938565b80610941565b80356102c181610957565b6000806040838503121561097e5761097e600080fd5b600061098a858561094c565b925050602061099b8582860161095d565b9150509250929050565b8015155b82525050565b602081016102c182846109a5565b806109a9565b602081016102c182846109bd565b6000806000606084860312156109e9576109e9600080fd5b60006109f5868661094c565b9350506020610a068682870161094c565b9250506040610a178682870161095d565b9150509250925092565b60ff81166109a9565b602081016102c18284610a21565b600060208284031215610a4d57610a4d600080fd5b6000610a59848461094c565b949350505050565b6109a981610927565b602081016102c18284610a61565b60008083601f840112610a8d57610a8d600080fd5b50813567ffffffffffffffff811115610aa857610aa8600080fd5b602083019150836020820283011115610ac357610ac3600080fd5b9250929050565b60008060208385031215610ae057610ae0600080fd5b823567ffffffffffffffff811115610afa57610afa600080fd5b610b0685828601610a78565b92509250509250929050565b60008060408385031215610b2857610b28600080fd5b6000610b34858561094c565b925050602061099b8582860161094c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b6f57607f821691505b602082108103610b8157610b81610b45565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1936849003018112610c5457610c54600080fd5b9190910192915050565b60006102c1610c6a8381565b90565b6109a981610c5e565b60408101610c848285610a61565b6102e66020830184610c6d565b634e487b7160e01b600052601160045260246000fd5b600060018201610cb957610cb9610c91565b5060010190565b60608101610cce8286610a61565b610cdb60208301856109bd565b610a5960408301846109bd565b808201808211156102c1576102c1610c9156fea2646970667358221220e0821c2da2d89cd6268be84339e5df240d1410e215bce1cee061b134a30c086764736f6c63430008140033", } // ZenBaseABI is the input ABI used to generate the binding from. @@ -58,7 +58,7 @@ var ZenBaseABI = ZenBaseMetaData.ABI var ZenBaseBin = ZenBaseMetaData.Bin // DeployZenBase deploys a new Ethereum contract, binding an instance of ZenBase to it. -func DeployZenBase(auth *bind.TransactOpts, backend bind.ContractBackend, transactionPostProcessor common.Address, transactionDecoder common.Address) (common.Address, *types.Transaction, *ZenBase, error) { +func DeployZenBase(auth *bind.TransactOpts, backend bind.ContractBackend, transactionPostProcessor common.Address) (common.Address, *types.Transaction, *ZenBase, error) { parsed, err := ZenBaseMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -67,7 +67,7 @@ func DeployZenBase(auth *bind.TransactOpts, backend bind.ContractBackend, transa return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZenBaseBin), backend, transactionPostProcessor, transactionDecoder) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZenBaseBin), backend, transactionPostProcessor) if err != nil { return common.Address{}, nil, nil, err } diff --git a/contracts/src/zen/ZenBase.sol b/contracts/src/zen/ZenBase.sol index 381ebf3ab9..99f799c1b1 100644 --- a/contracts/src/zen/ZenBase.sol +++ b/contracts/src/zen/ZenBase.sol @@ -31,16 +31,13 @@ contract ZenBase is OnBlockEndCallback, ERC20, Ownable { * @dev Constructor that gives msg.sender all of existing tokens. * You can customize the initial supply as needed. */ - constructor(address transactionPostProcessor, address transactionDecoder) ERC20("Zen", "ZEN") Ownable(msg.sender) { + constructor(address transactionPostProcessor) ERC20("Zen", "ZEN") Ownable(msg.sender) { require(transactionPostProcessor != address(0), "Invalid transaction analyzer address"); - require(transactionDecoder != address(0), "Invalid transaction decoder address"); _caller = transactionPostProcessor; - _transactionDecoder = transactionDecoder; } address private _caller; - address private _transactionDecoder; modifier onlyCaller() { require(msg.sender == _caller, "Caller: caller is not the designated address"); diff --git a/integration/simulation/simulation.go b/integration/simulation/simulation.go index ee1a2ecdbf..74777ac769 100644 --- a/integration/simulation/simulation.go +++ b/integration/simulation/simulation.go @@ -267,23 +267,11 @@ func (s *Simulation) deployTenZen() { auth.Context = context.Background() auth.Nonce = big.NewInt(0).SetUint64(NextNonce(s.ctx, s.RPCHandles, owner)) - address, stx, _, err := Structs.DeployStructs(auth, ownerRpc) - if err != nil { - panic(fmt.Errorf("failed to deploy transaction decoder: %w", err)) - } - - receipt, err := bind.WaitMined(s.ctx, ownerRpc, stx) - if err != nil || receipt.Status != types.ReceiptStatusSuccessful { - panic("failed to deploy transaction decoder") - } - - auth.Nonce = big.NewInt(0).SetUint64(NextNonce(s.ctx, s.RPCHandles, owner)) - - zenBaseAddress, signedTx, _, err := ZenBase.DeployZenBase(auth, ownerRpc, cfg.TransactionPostProcessorAddress, address) //, "ZenBase", "ZEN") + zenBaseAddress, signedTx, _, err := ZenBase.DeployZenBase(auth, ownerRpc, cfg.TransactionPostProcessorAddress) //, "ZenBase", "ZEN") if err != nil { panic(fmt.Errorf("failed to deploy zen base contract: %w", err)) } - if receipt, err = bind.WaitMined(s.ctx, s.RPCHandles.TenWalletRndClient(owner), signedTx); err != nil || receipt.Status != types.ReceiptStatusSuccessful { + if receipt, err := bind.WaitMined(s.ctx, s.RPCHandles.TenWalletRndClient(owner), signedTx); err != nil || receipt.Status != types.ReceiptStatusSuccessful { panic(fmt.Errorf("failed to deploy zen base contract")) } s.ZenBaseAddress = zenBaseAddress @@ -298,7 +286,7 @@ func (s *Simulation) deployTenZen() { if err != nil { panic(fmt.Errorf("failed to add on block end callback: %w", err)) } - receipt, err = bind.WaitMined(s.ctx, ownerRpc, tx) + receipt, err := bind.WaitMined(s.ctx, ownerRpc, tx) if err != nil || receipt.Status != types.ReceiptStatusSuccessful { panic(fmt.Errorf("failed to add on block end callback")) } From 6d5a1cc21e9fd8012790c46ec52d87821ab3a8ed Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Tue, 8 Oct 2024 12:43:56 +0300 Subject: [PATCH 21/23] Addressed PR review comments. --- contracts/src/system/TransactionPostProcessor.sol | 1 - go/enclave/system/hooks.go | 7 +++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/contracts/src/system/TransactionPostProcessor.sol b/contracts/src/system/TransactionPostProcessor.sol index 705dd84060..89be576667 100644 --- a/contracts/src/system/TransactionPostProcessor.sol +++ b/contracts/src/system/TransactionPostProcessor.sol @@ -7,7 +7,6 @@ import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import "./OnBlockEndCallback.sol"; import "./Transaction.sol"; -//TODO: @PR Review - Pick appropriate name contract TransactionPostProcessor is Initializable, AccessControl{ using Structs for Structs.Transaction; diff --git a/go/enclave/system/hooks.go b/go/enclave/system/hooks.go index 132f427a97..b3624367b7 100644 --- a/go/enclave/system/hooks.go +++ b/go/enclave/system/hooks.go @@ -155,14 +155,17 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(ctx context.Contex for _, tx := range transactions { // Start of Selection + + txMetadata := txSuccessMap[tx.Hash()] + transaction := TransactionPostProcessor.StructsTransaction{ Nonce: big.NewInt(int64(tx.Nonce())), GasPrice: tx.GasPrice(), GasLimit: big.NewInt(int64(tx.Gas())), Value: tx.Value(), Data: tx.Data(), - Successful: txSuccessMap[tx.Hash()].status, - GasUsed: txSuccessMap[tx.Hash()].gasUsed, + Successful: txMetadata.status, + GasUsed: txMetadata.gasUsed, } if tx.To() != nil { transaction.To = *tx.To() From 56cab538b5bc5e7822a756094c1970580ea372af Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Tue, 8 Oct 2024 13:01:28 +0300 Subject: [PATCH 22/23] Matching ABI. --- .../SystemDeployer/SystemDeployer.go | 2 +- .../TransactionPostProcessor.go | 2 +- contracts/generated/ZenTestnet/ZenTestnet.go | 1311 +++++++++++++++++ 3 files changed, 1313 insertions(+), 2 deletions(-) create mode 100644 contracts/generated/ZenTestnet/ZenTestnet.go diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index 409fb10f95..995c06a73c 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162002501380380620025018339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610e80806200035583390190565b61132c80620011d583390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601981527f5472616e73616374696f6e73506f737450726f636573736f7200000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea26469706673582212207e8bb5b3c5325287132cce12bf7e7ef8424da2013b4cd11d016fe18cfebebefd64736f6c63430008140033608060405234801561001057600080fd5b50610e60806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806364c55a9d146101bb57806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6101456101c9366004610a03565b610548565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906106679088908890600401610dce565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610df6565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610e0f565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b67ffffffffffffffff8116610890565b803561032a81610bdc565b50600061032a6020830183610bec565b67ffffffffffffffff81166108d3565b60006101408301610c288380610afa565b610c328582610b0a565b50610c406020840184610b13565b610c4d6020860182610919565b50610c5b6040840184610b13565b610c686040860182610919565b50610c766060840184610b13565b610c836060860182610919565b50610c916080840184610b23565b610c9e6080860182610b33565b50610cac60a0840184610b13565b610cb960a0860182610919565b50610cc760c0840184610b3c565b85830360c0870152610cda838284610b99565b92505050610ceb60e0840184610b23565b610cf860e0860182610b33565b50610d07610100840184610bcc565b610d156101008601826108cf565b50610d24610120840184610bf7565b610d32610120860182610c07565b509392505050565b6000610d468383610c17565b9392505050565b6000823561013e1936849003018112610d6857610d68600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610dc1578484038952610d9f8284610d4d565b610da98582610d3a565b94505060208201602099909901989150600101610d88565b5091979650505050505050565b602080825281016108c7818486610d71565b634e487b7160e01b600052601160045260246000fd5b600060018201610e0857610e08610de0565b5060010190565b60408101610e1d8285610b33565b610d46602083018461091956fea2646970667358221220422c13cdc037b4b963eaaac39cfada9a0329d6983c908bc2e2ded1878aa18b8d64736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + Bin: "0x60806040523480156200001157600080fd5b5060405162002501380380620025018339810160408190526200003491620001bf565b6200003f8162000046565b5062000307565b6000604051620000569062000169565b604051809103906000f08015801562000073573d6000803e3d6000fd5b509050600063485cc95560e01b833360405160240162000095929190620001fd565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000620000df8385846200012060201b60201c565b90507fbd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade698160405162000112919062000223565b60405180910390a150505050565b600080848484604051620001349062000177565b6200014293929190620002cb565b604051809103906000f0801580156200015f573d6000803e3d6000fd5b5095945050505050565b610e80806200035583390190565b61132c80620011d583390190565b60006001600160a01b0382165b92915050565b620001a38162000185565b8114620001af57600080fd5b50565b8051620001928162000198565b600060208284031215620001d657620001d6600080fd5b6000620001e48484620001b2565b949350505050565b620001f78162000185565b82525050565b604081016200020d8285620001ec565b6200021c6020830184620001ec565b9392505050565b604080825281016200025f81601981527f5472616e73616374696f6e73506f737450726f636573736f7200000000000000602082015260400190565b9050620001926020830184620001ec565b60005b838110156200028d57818101518382015260200162000273565b50506000910152565b6000620002a1825190565b808452602084019350620002ba81856020860162000270565b601f01601f19169290920192915050565b60608101620002db8286620001ec565b620002ea6020830185620001ec565b8181036040830152620002fe818462000296565b95945050505050565b603f80620003166000396000f3fe6080604052600080fdfea264697066735822122095ecebd4c7b5c8bccc7d44a2c6a4ed977570ad4c230a5edc80a524e46958ebf564736f6c63430008140033608060405234801561001057600080fd5b50610e60806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806364c55a9d146101bb57806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6101456101c9366004610a03565b610548565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906106679088908890600401610dce565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610df6565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610e0f565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b67ffffffffffffffff8116610890565b803561032a81610bdc565b50600061032a6020830183610bec565b67ffffffffffffffff81166108d3565b60006101408301610c288380610afa565b610c328582610b0a565b50610c406020840184610b13565b610c4d6020860182610919565b50610c5b6040840184610b13565b610c686040860182610919565b50610c766060840184610b13565b610c836060860182610919565b50610c916080840184610b23565b610c9e6080860182610b33565b50610cac60a0840184610b13565b610cb960a0860182610919565b50610cc760c0840184610b3c565b85830360c0870152610cda838284610b99565b92505050610ceb60e0840184610b23565b610cf860e0860182610b33565b50610d07610100840184610bcc565b610d156101008601826108cf565b50610d24610120840184610bf7565b610d32610120860182610c07565b509392505050565b6000610d468383610c17565b9392505050565b6000823561013e1936849003018112610d6857610d68600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610dc1578484038952610d9f8284610d4d565b610da98582610d3a565b94505060208201602099909901989150600101610d88565b5091979650505050505050565b602080825281016108c7818486610d71565b634e487b7160e01b600052601160045260246000fd5b600060018201610e0857610e08610de0565b5060010190565b60408101610e1d8285610b33565b610d46602083018461091956fea26469706673582212200b0c2d8cf0499a5aeaa5aad09b481762d0bf45ab68c10f7ee4b33405bc19462d64736f6c6343000814003360a06040526040516200132c3803806200132c8339810160408190526200002691620004c5565b828162000034828262000098565b505081604051620000459062000351565b6200005191906200054c565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b506001600160a01b03166080526200008f6200008960805190565b620000fe565b505050620005ac565b620000a38262000167565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f057620000eb8282620001e4565b505050565b620000fa62000263565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001406000805160206200130c833981519152546001600160a01b031690565b82604051620001519291906200055c565b60405180910390a1620001648162000285565b50565b806001600160a01b03163b600003620001a05780604051634c9c8ce360e01b81526004016200019791906200054c565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002039190620005a0565b600060405180830381855af49150503d806000811462000240576040519150601f19603f3d011682016040523d82523d6000602084013e62000245565b606091505b50909250905062000258858383620002c9565b925050505b92915050565b3415620002835760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002b2576000604051633173bdd160e11b81526004016200019791906200054c565b806000805160206200130c833981519152620001c3565b606082620002e257620002dc8262000327565b62000320565b8151158015620002fa57506001600160a01b0384163b155b156200031d5783604051639996b31560e01b81526004016200019791906200054c565b50805b9392505050565b805115620003385780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106ff8062000c0d83390190565b60006001600160a01b0382166200025d565b6200037c816200035f565b81146200016457600080fd5b80516200025d8162000371565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b0381118282101715620003d357620003d362000395565b6040525050565b6000620003e660405190565b9050620003f48282620003ab565b919050565b60006001600160401b0382111562000415576200041562000395565b601f19601f83011660200192915050565b60005b838110156200044357818101518382015260200162000429565b50506000910152565b6000620004636200045d84620003f9565b620003da565b905082815260208101848484011115620004805762000480600080fd5b6200048d84828562000426565b509392505050565b600082601f830112620004ab57620004ab600080fd5b8151620004bd8482602086016200044c565b949350505050565b600080600060608486031215620004df57620004df600080fd5b6000620004ed868662000388565b9350506020620005008682870162000388565b604086015190935090506001600160401b03811115620005235762000523600080fd5b620005318682870162000495565b9150509250925092565b62000546816200035f565b82525050565b602081016200025d82846200053b565b604081016200056c82856200053b565b6200032060208301846200053b565b600062000586825190565b6200059681856020860162000426565b9290920192915050565b6200025d81836200057b565b608051610646620005c76000396000601001526106466000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea919061054b565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102889190610606565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161020991906105b2565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b90508281526020810184848401111561050c5761050c600080fd5b6105178482856104d2565b509392505050565b600082601f83011261053357610533600080fd5b81356105438482602086016104de565b949350505050565b6000806040838503121561056157610561600080fd5b600061056d8585610424565b925050602083013567ffffffffffffffff81111561058d5761058d600080fd5b6105998582860161051f565b9150509250929050565b6105ac816103ff565b82525050565b602081016102dd82846105a3565b60005b838110156105db5781810151838201526020016105c3565b50506000910152565b60006105ee825190565b6105fc8185602086016105c0565b9290920192915050565b6102dd81836105e456fea2646970667358221220eecd99cd63d826407d5639a8db1821a6b0aadb0feacc1d2f9d4541d896c80bd464736f6c63430008140033608060405234801561001057600080fd5b506040516106ff3803806106ff83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a9190610130565b60405180910390fd5b61006c81610073565b505061013e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b600061011984846100ed565b949350505050565b61012a816100c3565b82525050565b602081016100d08284610121565b6105b28061014d6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610462565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610523565b34801561011a57600080fd5b5061007461012936600461053b565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef286903490610193908690869060040161055c565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b90508281526020810184848401111561042357610423600080fd5b61042e8482856103e9565b509392505050565b600082601f83011261044a5761044a600080fd5b813561045a8482602086016103f5565b949350505050565b60008060006060848603121561047a5761047a600080fd5b60006104868686610327565b93505060206104978682870161033b565b925050604084013567ffffffffffffffff8111156104b7576104b7600080fd5b6104c386828701610436565b9150509250925092565b60005b838110156104e85781810151838201526020016104d0565b50506000910152565b60006104fb825190565b8084526020840193506105128185602086016104cd565b601f01601f19169290920192915050565b6020808252810161053481846104f1565b9392505050565b60006020828403121561055057610550600080fd5b600061045a848461033b565b6040810161056a82856102eb565b818103602083015261045a81846104f156fea2646970667358221220b0f8a95a6e2425eadd967ffc0cf44240f936f4de811b02bbb90ac6935cf0ce6a64736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go b/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go index 38ca4303c2..e3e56d80d5 100644 --- a/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go +++ b/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go @@ -46,7 +46,7 @@ type StructsTransaction struct { // TransactionPostProcessorMetaData contains all meta data concerning the TransactionPostProcessor contract. var TransactionPostProcessorMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionsLength\",\"type\":\"uint256\"}],\"name\":\"TransactionsConverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_CALLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authorizedCaller\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"gasUsed\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610e60806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806364c55a9d146101bb57806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6101456101c9366004610a03565b610548565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906106679088908890600401610dce565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610df6565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610e0f565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b67ffffffffffffffff8116610890565b803561032a81610bdc565b50600061032a6020830183610bec565b67ffffffffffffffff81166108d3565b60006101408301610c288380610afa565b610c328582610b0a565b50610c406020840184610b13565b610c4d6020860182610919565b50610c5b6040840184610b13565b610c686040860182610919565b50610c766060840184610b13565b610c836060860182610919565b50610c916080840184610b23565b610c9e6080860182610b33565b50610cac60a0840184610b13565b610cb960a0860182610919565b50610cc760c0840184610b3c565b85830360c0870152610cda838284610b99565b92505050610ceb60e0840184610b23565b610cf860e0860182610b33565b50610d07610100840184610bcc565b610d156101008601826108cf565b50610d24610120840184610bf7565b610d32610120860182610c07565b509392505050565b6000610d468383610c17565b9392505050565b6000823561013e1936849003018112610d6857610d68600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610dc1578484038952610d9f8284610d4d565b610da98582610d3a565b94505060208201602099909901989150600101610d88565b5091979650505050505050565b602080825281016108c7818486610d71565b634e487b7160e01b600052601160045260246000fd5b600060018201610e0857610e08610de0565b5060010190565b60408101610e1d8285610b33565b610d46602083018461091956fea2646970667358221220422c13cdc037b4b963eaaac39cfada9a0329d6983c908bc2e2ded1878aa18b8d64736f6c63430008140033", + Bin: "0x608060405234801561001057600080fd5b50610e60806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635f03a66111610081578063a217fddf1161005b578063a217fddf14610205578063d547741f1461020d578063ee546fd81461022057600080fd5b80635f03a6611461019457806364c55a9d146101bb57806391d14854146101ce57600080fd5b806336568abe116100b257806336568abe14610147578063485cc9551461015a578063508a50f41461016d57600080fd5b806301ffc9a7146100d9578063248a9ca3146101025780632f2ff15d14610132575b600080fd5b6100ec6100e73660046108a6565b610297565b6040516100f991906108d9565b60405180910390f35b6101256101103660046108f8565b60009081526020819052604090206001015490565b6040516100f9919061091f565b610145610140366004610952565b610330565b005b610145610155366004610952565b61035b565b61014561016836600461098f565b6103ac565b6101257ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b6101257f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db81565b6101456101c9366004610a03565b610548565b6100ec6101dc366004610952565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610125600081565b61014561021b366004610952565b6106ab565b61014561022e366004610a4b565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061032a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461034b816106d0565b61035583836106dd565b50505050565b6001600160a01b038116331461039d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103a78282610787565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156103f75750825b905060008267ffffffffffffffff1660011480156104145750303b155b905081158015610422575080155b15610459576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561048d57845468ff00000000000000001916680100000000000000001785555b6104986000886106dd565b506104c37ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a598886106dd565b506104ee7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db876106dd565b50831561053f57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061053690600190610a87565b60405180910390a15b50505050505050565b7f33dd54660937884a707404066945db647918933f71cc471efc6d6d0c3665d8db610572816106d0565b60008290036105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad90610a95565b60405180910390fd5b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece41906105e690849061091f565b60405180910390a160005b6001548110156103555760006001828154811061061057610610610ad0565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906106679088908890600401610dce565b600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050505050806106a490610df6565b90506105f1565b6000828152602081905260409020600101546106c6816106d0565b6103558383610787565b6106da813361080a565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661077f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556107373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161032a565b50600061032a565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561077f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161032a565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166108685780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016105ad929190610e0f565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106da57600080fd5b803561032a8161086c565b6000602082840312156108bb576108bb600080fd5b60006108c7848461089b565b949350505050565b8015155b82525050565b6020810161032a82846108cf565b80610890565b803561032a816108e7565b60006020828403121561090d5761090d600080fd5b60006108c784846108ed565b806108d3565b6020810161032a8284610919565b60006001600160a01b03821661032a565b6108908161092d565b803561032a8161093e565b6000806040838503121561096857610968600080fd5b600061097485856108ed565b925050602061098585828601610947565b9150509250929050565b600080604083850312156109a5576109a5600080fd5b60006109748585610947565b60008083601f8401126109c6576109c6600080fd5b50813567ffffffffffffffff8111156109e1576109e1600080fd5b6020830191508360208202830111156109fc576109fc600080fd5b9250929050565b60008060208385031215610a1957610a19600080fd5b823567ffffffffffffffff811115610a3357610a33600080fd5b610a3f858286016109b1565b92509250509250929050565b600060208284031215610a6057610a60600080fd5b60006108c78484610947565b600067ffffffffffffffff821661032a565b6108d381610a6c565b6020810161032a8284610a7e565b6020808252810161032a81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60ff8116610890565b803561032a81610ae6565b50600061032a6020830183610aef565b60ff81166108d3565b50600061032a60208301836108ed565b50600061032a6020830183610947565b6108d38161092d565b6000808335601e1936859003018112610b5757610b57600080fd5b830160208101925035905067ffffffffffffffff811115610b7a57610b7a600080fd5b368190038213156109fc576109fc600080fd5b82818337506000910152565b818352602083019250610bad828483610b8d565b50601f01601f19160190565b801515610890565b803561032a81610bb9565b50600061032a6020830183610bc1565b67ffffffffffffffff8116610890565b803561032a81610bdc565b50600061032a6020830183610bec565b67ffffffffffffffff81166108d3565b60006101408301610c288380610afa565b610c328582610b0a565b50610c406020840184610b13565b610c4d6020860182610919565b50610c5b6040840184610b13565b610c686040860182610919565b50610c766060840184610b13565b610c836060860182610919565b50610c916080840184610b23565b610c9e6080860182610b33565b50610cac60a0840184610b13565b610cb960a0860182610919565b50610cc760c0840184610b3c565b85830360c0870152610cda838284610b99565b92505050610ceb60e0840184610b23565b610cf860e0860182610b33565b50610d07610100840184610bcc565b610d156101008601826108cf565b50610d24610120840184610bf7565b610d32610120860182610c07565b509392505050565b6000610d468383610c17565b9392505050565b6000823561013e1936849003018112610d6857610d68600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610dc1578484038952610d9f8284610d4d565b610da98582610d3a565b94505060208201602099909901989150600101610d88565b5091979650505050505050565b602080825281016108c7818486610d71565b634e487b7160e01b600052601160045260246000fd5b600060018201610e0857610e08610de0565b5060010190565b60408101610e1d8285610b33565b610d46602083018461091956fea26469706673582212200b0c2d8cf0499a5aeaa5aad09b481762d0bf45ab68c10f7ee4b33405bc19462d64736f6c63430008140033", } // TransactionPostProcessorABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ZenTestnet/ZenTestnet.go b/contracts/generated/ZenTestnet/ZenTestnet.go new file mode 100644 index 0000000000..f3799db60e --- /dev/null +++ b/contracts/generated/ZenTestnet/ZenTestnet.go @@ -0,0 +1,1311 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ZenTestnet + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// StructsTransaction is an auto generated low-level Go binding around an user-defined struct. +type StructsTransaction struct { + TxType uint8 + Nonce *big.Int + GasPrice *big.Int + GasLimit *big.Int + To common.Address + Value *big.Int + Data []byte + From common.Address + Successful bool + GasUsed uint64 +} + +// ZenTestnetMetaData contains all meta data concerning the ZenTestnet contract. +var ZenTestnetMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionPostProcessor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"gasUsed\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6113ea806100df6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063a9059cbb11610066578063a9059cbb14610224578063c4d66de814610237578063dd62ed3e1461024a578063f2fde38b146102a257600080fd5b80638da5cb5b146101d157806395d89b41146102095780639f9976af1461021157600080fd5b806323b872dd116100c857806323b872dd1461015d578063313ce5671461017057806370a082311461017f578063715018a6146101c757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461012d575b600080fd5b6100f76102b5565b6040516101049190610dda565b60405180910390f35b61012061011b366004610e2c565b61038a565b6040516101049190610e73565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040516101049190610e87565b61012061016b366004610e95565b6103a4565b60126040516101049190610eee565b61015061018d366004610efc565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6101cf6103ca565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101049190610f2e565b6100f76103de565b6101cf61021f366004610f8e565b61042f565b610120610232366004610e2c565b610554565b6101cf610245366004610efc565b610562565b610150610258366004610fd6565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6101cf6102b0366004610efc565b610766565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00916103069061101f565b80601f01602080910402602001604051908101604052809291908181526020018280546103329061101f565b801561037f5780601f106103545761010080835404028352916020019161037f565b820191906000526020600020905b81548152906001019060200180831161036257829003601f168201915b505050505091505090565b6000336103988185856107bd565b60019150505b92915050565b6000336103b28582856107ca565b6103bd85858561086d565b60019150505b9392505050565b6103d26108e5565b6103dc6000610959565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00916103069061101f565b6000546001600160a01b031633146104625760405162461bcd60e51b8152600401610459906110a5565b60405180910390fd5b60008190036104835760405162461bcd60e51b8152600401610459906110b5565b60005b8181101561054f576104ce8383838181106104a3576104a36110f0565b90506020028101906104b59190611106565b6104c79061010081019060e001610efc565b60016109d7565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1838383818110610501576105016110f0565b90506020028101906105139190611106565b6105259061010081019060e001610efc565b6001604051610535929190611143565b60405180910390a18061054781611174565b915050610486565b505050565b60003361039881858561086d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105ad5750825b905060008267ffffffffffffffff1660011480156105ca5750303b155b9050811580156105d8575080155b1561060f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561064357845468ff00000000000000001916680100000000000000001785555b6001600160a01b0386166106695760405162461bcd60e51b8152600401610459906111e5565b6106dd6040518060400160405280600381526020017f5a656e00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5a454e0000000000000000000000000000000000000000000000000000000000815250610a11565b6106e633610a23565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561075e57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061075590600190611210565b60405180910390a15b505050505050565b61076e6108e5565b6001600160a01b0381166107b15760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b6107ba81610959565b50565b61054f8383836001610a34565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace01602090815260408083209386168352929052205460001981146108675781811015610858578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016104599392919061121e565b61086784848484036000610a34565b50505050565b6001600160a01b0383166108b05760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b6001600160a01b0382166108da57600060405163ec442f0560e01b81526004016104599190610f2e565b61054f838383610b5e565b336109177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103dc57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b038216610a0157600060405163ec442f0560e01b81526004016104599190610f2e565b610a0d60008383610b5e565b5050565b610a19610cb2565b610a0d8282610d19565b610a2b610cb2565b6107ba81610d7c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516610a985760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b6001600160a01b038416610adb5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016104599190610f2e565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115610b5757836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610b4e9190610e87565b60405180910390a35b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416610bac5781816002016000828254610ba19190611246565b90915550610c249050565b6001600160a01b03841660009081526020829052604090205482811015610c05578481846040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016104599392919061121e565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316610c42576002810180548390039055610c61565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ca49190610e87565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166103dc576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d21610cb2565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610d6d84826112f4565b506004810161086783826112f4565b61076e610cb2565b60005b83811015610d9f578181015183820152602001610d87565b50506000910152565b6000610db2825190565b808452602084019350610dc9818560208601610d84565b601f01601f19169290920192915050565b602080825281016103c38184610da8565b60006001600160a01b03821661039e565b610e0581610deb565b81146107ba57600080fd5b803561039e81610dfc565b80610e05565b803561039e81610e1b565b60008060408385031215610e4257610e42600080fd5b6000610e4e8585610e10565b9250506020610e5f85828601610e21565b9150509250929050565b8015155b82525050565b6020810161039e8284610e69565b80610e6d565b6020810161039e8284610e81565b600080600060608486031215610ead57610ead600080fd5b6000610eb98686610e10565b9350506020610eca86828701610e10565b9250506040610edb86828701610e21565b9150509250925092565b60ff8116610e6d565b6020810161039e8284610ee5565b600060208284031215610f1157610f11600080fd5b6000610f1d8484610e10565b949350505050565b610e6d81610deb565b6020810161039e8284610f25565b60008083601f840112610f5157610f51600080fd5b50813567ffffffffffffffff811115610f6c57610f6c600080fd5b602083019150836020820283011115610f8757610f87600080fd5b9250929050565b60008060208385031215610fa457610fa4600080fd5b823567ffffffffffffffff811115610fbe57610fbe600080fd5b610fca85828601610f3c565b92509250509250929050565b60008060408385031215610fec57610fec600080fd5b6000610ff88585610e10565b9250506020610e5f85828601610e10565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061103357607f821691505b60208210810361104557611045611009565b50919050565b602c8152602081017f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e81527f6174656420616464726573730000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161039e8161104b565b6020808252810161039e81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e193684900301811261112157611121600080fd5b9190910192915050565b600061039e6111378381565b90565b610e6d8161112b565b604081016111518285610f25565b6103c3602083018461113a565b634e487b7160e01b600052601160045260246000fd5b6000600182016111865761118661115e565b5060010190565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a65722061646481527f72657373000000000000000000000000000000000000000000000000000000006020820152905061109f565b6020808252810161039e8161118d565b600067ffffffffffffffff821661039e565b610e6d816111f5565b6020810161039e8284611207565b6060810161122c8286610f25565b6112396020830185610e81565b610f1d6040830184610e81565b8082018082111561039e5761039e61115e565b634e487b7160e01b600052604160045260246000fd5b6112788361112b565b815460001960089490940293841b1916921b91909117905550565b600061054f81848461126f565b81811015610a0d576112b3600082611293565b6001016112a0565b601f82111561054f576000818152602090206020601f850104810160208510156112e25750805b610b576020601f8601048301826112a0565b815167ffffffffffffffff81111561130e5761130e611259565b611318825461101f565b6113238282856112bb565b506020601f82116001811461135857600083156113405750848201515b600019600885021c1981166002850217855550610b57565b600084815260208120601f198516915b828110156113885787850151825560209485019460019092019101611368565b50848210156113a55783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220af83f7a345a0203ea0ecb6c433c7d1c60f7e5d631ffc58ce324e6d920720682864736f6c63430008140033", +} + +// ZenTestnetABI is the input ABI used to generate the binding from. +// Deprecated: Use ZenTestnetMetaData.ABI instead. +var ZenTestnetABI = ZenTestnetMetaData.ABI + +// ZenTestnetBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ZenTestnetMetaData.Bin instead. +var ZenTestnetBin = ZenTestnetMetaData.Bin + +// DeployZenTestnet deploys a new Ethereum contract, binding an instance of ZenTestnet to it. +func DeployZenTestnet(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ZenTestnet, error) { + parsed, err := ZenTestnetMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZenTestnetBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ZenTestnet{ZenTestnetCaller: ZenTestnetCaller{contract: contract}, ZenTestnetTransactor: ZenTestnetTransactor{contract: contract}, ZenTestnetFilterer: ZenTestnetFilterer{contract: contract}}, nil +} + +// ZenTestnet is an auto generated Go binding around an Ethereum contract. +type ZenTestnet struct { + ZenTestnetCaller // Read-only binding to the contract + ZenTestnetTransactor // Write-only binding to the contract + ZenTestnetFilterer // Log filterer for contract events +} + +// ZenTestnetCaller is an auto generated read-only Go binding around an Ethereum contract. +type ZenTestnetCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZenTestnetTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ZenTestnetTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZenTestnetFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ZenTestnetFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZenTestnetSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ZenTestnetSession struct { + Contract *ZenTestnet // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ZenTestnetCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ZenTestnetCallerSession struct { + Contract *ZenTestnetCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ZenTestnetTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ZenTestnetTransactorSession struct { + Contract *ZenTestnetTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ZenTestnetRaw is an auto generated low-level Go binding around an Ethereum contract. +type ZenTestnetRaw struct { + Contract *ZenTestnet // Generic contract binding to access the raw methods on +} + +// ZenTestnetCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ZenTestnetCallerRaw struct { + Contract *ZenTestnetCaller // Generic read-only contract binding to access the raw methods on +} + +// ZenTestnetTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ZenTestnetTransactorRaw struct { + Contract *ZenTestnetTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewZenTestnet creates a new instance of ZenTestnet, bound to a specific deployed contract. +func NewZenTestnet(address common.Address, backend bind.ContractBackend) (*ZenTestnet, error) { + contract, err := bindZenTestnet(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ZenTestnet{ZenTestnetCaller: ZenTestnetCaller{contract: contract}, ZenTestnetTransactor: ZenTestnetTransactor{contract: contract}, ZenTestnetFilterer: ZenTestnetFilterer{contract: contract}}, nil +} + +// NewZenTestnetCaller creates a new read-only instance of ZenTestnet, bound to a specific deployed contract. +func NewZenTestnetCaller(address common.Address, caller bind.ContractCaller) (*ZenTestnetCaller, error) { + contract, err := bindZenTestnet(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ZenTestnetCaller{contract: contract}, nil +} + +// NewZenTestnetTransactor creates a new write-only instance of ZenTestnet, bound to a specific deployed contract. +func NewZenTestnetTransactor(address common.Address, transactor bind.ContractTransactor) (*ZenTestnetTransactor, error) { + contract, err := bindZenTestnet(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ZenTestnetTransactor{contract: contract}, nil +} + +// NewZenTestnetFilterer creates a new log filterer instance of ZenTestnet, bound to a specific deployed contract. +func NewZenTestnetFilterer(address common.Address, filterer bind.ContractFilterer) (*ZenTestnetFilterer, error) { + contract, err := bindZenTestnet(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ZenTestnetFilterer{contract: contract}, nil +} + +// bindZenTestnet binds a generic wrapper to an already deployed contract. +func bindZenTestnet(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ZenTestnetMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ZenTestnet *ZenTestnetRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZenTestnet.Contract.ZenTestnetCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ZenTestnet *ZenTestnetRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZenTestnet.Contract.ZenTestnetTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZenTestnet *ZenTestnetRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZenTestnet.Contract.ZenTestnetTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ZenTestnet *ZenTestnetCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZenTestnet.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ZenTestnet *ZenTestnetTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZenTestnet.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZenTestnet *ZenTestnetTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZenTestnet.Contract.contract.Transact(opts, method, params...) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_ZenTestnet *ZenTestnetCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _ZenTestnet.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_ZenTestnet *ZenTestnetSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ZenTestnet.Contract.Allowance(&_ZenTestnet.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_ZenTestnet *ZenTestnetCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ZenTestnet.Contract.Allowance(&_ZenTestnet.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ZenTestnet *ZenTestnetCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _ZenTestnet.contract.Call(opts, &out, "balanceOf", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ZenTestnet *ZenTestnetSession) BalanceOf(account common.Address) (*big.Int, error) { + return _ZenTestnet.Contract.BalanceOf(&_ZenTestnet.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ZenTestnet *ZenTestnetCallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _ZenTestnet.Contract.BalanceOf(&_ZenTestnet.CallOpts, account) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ZenTestnet *ZenTestnetCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ZenTestnet.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ZenTestnet *ZenTestnetSession) Decimals() (uint8, error) { + return _ZenTestnet.Contract.Decimals(&_ZenTestnet.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ZenTestnet *ZenTestnetCallerSession) Decimals() (uint8, error) { + return _ZenTestnet.Contract.Decimals(&_ZenTestnet.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ZenTestnet *ZenTestnetCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ZenTestnet.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ZenTestnet *ZenTestnetSession) Name() (string, error) { + return _ZenTestnet.Contract.Name(&_ZenTestnet.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ZenTestnet *ZenTestnetCallerSession) Name() (string, error) { + return _ZenTestnet.Contract.Name(&_ZenTestnet.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ZenTestnet *ZenTestnetCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZenTestnet.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ZenTestnet *ZenTestnetSession) Owner() (common.Address, error) { + return _ZenTestnet.Contract.Owner(&_ZenTestnet.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ZenTestnet *ZenTestnetCallerSession) Owner() (common.Address, error) { + return _ZenTestnet.Contract.Owner(&_ZenTestnet.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ZenTestnet *ZenTestnetCaller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ZenTestnet.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ZenTestnet *ZenTestnetSession) Symbol() (string, error) { + return _ZenTestnet.Contract.Symbol(&_ZenTestnet.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ZenTestnet *ZenTestnetCallerSession) Symbol() (string, error) { + return _ZenTestnet.Contract.Symbol(&_ZenTestnet.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ZenTestnet *ZenTestnetCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZenTestnet.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ZenTestnet *ZenTestnetSession) TotalSupply() (*big.Int, error) { + return _ZenTestnet.Contract.TotalSupply(&_ZenTestnet.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ZenTestnet *ZenTestnetCallerSession) TotalSupply() (*big.Int, error) { + return _ZenTestnet.Contract.TotalSupply(&_ZenTestnet.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 value) returns(bool) +func (_ZenTestnet *ZenTestnetTransactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenTestnet.contract.Transact(opts, "approve", spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 value) returns(bool) +func (_ZenTestnet *ZenTestnetSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenTestnet.Contract.Approve(&_ZenTestnet.TransactOpts, spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 value) returns(bool) +func (_ZenTestnet *ZenTestnetTransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenTestnet.Contract.Approve(&_ZenTestnet.TransactOpts, spender, value) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address transactionPostProcessor) returns() +func (_ZenTestnet *ZenTestnetTransactor) Initialize(opts *bind.TransactOpts, transactionPostProcessor common.Address) (*types.Transaction, error) { + return _ZenTestnet.contract.Transact(opts, "initialize", transactionPostProcessor) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address transactionPostProcessor) returns() +func (_ZenTestnet *ZenTestnetSession) Initialize(transactionPostProcessor common.Address) (*types.Transaction, error) { + return _ZenTestnet.Contract.Initialize(&_ZenTestnet.TransactOpts, transactionPostProcessor) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address transactionPostProcessor) returns() +func (_ZenTestnet *ZenTestnetTransactorSession) Initialize(transactionPostProcessor common.Address) (*types.Transaction, error) { + return _ZenTestnet.Contract.Initialize(&_ZenTestnet.TransactOpts, transactionPostProcessor) +} + +// OnBlockEnd is a paid mutator transaction binding the contract method 0x9f9976af. +// +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint64)[] transactions) returns() +func (_ZenTestnet *ZenTestnetTransactor) OnBlockEnd(opts *bind.TransactOpts, transactions []StructsTransaction) (*types.Transaction, error) { + return _ZenTestnet.contract.Transact(opts, "onBlockEnd", transactions) +} + +// OnBlockEnd is a paid mutator transaction binding the contract method 0x9f9976af. +// +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint64)[] transactions) returns() +func (_ZenTestnet *ZenTestnetSession) OnBlockEnd(transactions []StructsTransaction) (*types.Transaction, error) { + return _ZenTestnet.Contract.OnBlockEnd(&_ZenTestnet.TransactOpts, transactions) +} + +// OnBlockEnd is a paid mutator transaction binding the contract method 0x9f9976af. +// +// Solidity: function onBlockEnd((uint8,uint256,uint256,uint256,address,uint256,bytes,address,bool,uint64)[] transactions) returns() +func (_ZenTestnet *ZenTestnetTransactorSession) OnBlockEnd(transactions []StructsTransaction) (*types.Transaction, error) { + return _ZenTestnet.Contract.OnBlockEnd(&_ZenTestnet.TransactOpts, transactions) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ZenTestnet *ZenTestnetTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZenTestnet.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ZenTestnet *ZenTestnetSession) RenounceOwnership() (*types.Transaction, error) { + return _ZenTestnet.Contract.RenounceOwnership(&_ZenTestnet.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ZenTestnet *ZenTestnetTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ZenTestnet.Contract.RenounceOwnership(&_ZenTestnet.TransactOpts) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 value) returns(bool) +func (_ZenTestnet *ZenTestnetTransactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenTestnet.contract.Transact(opts, "transfer", to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 value) returns(bool) +func (_ZenTestnet *ZenTestnetSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenTestnet.Contract.Transfer(&_ZenTestnet.TransactOpts, to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 value) returns(bool) +func (_ZenTestnet *ZenTestnetTransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenTestnet.Contract.Transfer(&_ZenTestnet.TransactOpts, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 value) returns(bool) +func (_ZenTestnet *ZenTestnetTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenTestnet.contract.Transact(opts, "transferFrom", from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 value) returns(bool) +func (_ZenTestnet *ZenTestnetSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenTestnet.Contract.TransferFrom(&_ZenTestnet.TransactOpts, from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 value) returns(bool) +func (_ZenTestnet *ZenTestnetTransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ZenTestnet.Contract.TransferFrom(&_ZenTestnet.TransactOpts, from, to, value) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ZenTestnet *ZenTestnetTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ZenTestnet.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ZenTestnet *ZenTestnetSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ZenTestnet.Contract.TransferOwnership(&_ZenTestnet.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ZenTestnet *ZenTestnetTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ZenTestnet.Contract.TransferOwnership(&_ZenTestnet.TransactOpts, newOwner) +} + +// ZenTestnetApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ZenTestnet contract. +type ZenTestnetApprovalIterator struct { + Event *ZenTestnetApproval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZenTestnetApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZenTestnetApproval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZenTestnetApproval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZenTestnetApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZenTestnetApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZenTestnetApproval represents a Approval event raised by the ZenTestnet contract. +type ZenTestnetApproval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_ZenTestnet *ZenTestnetFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*ZenTestnetApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _ZenTestnet.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &ZenTestnetApprovalIterator{contract: _ZenTestnet.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_ZenTestnet *ZenTestnetFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ZenTestnetApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _ZenTestnet.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZenTestnetApproval) + if err := _ZenTestnet.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_ZenTestnet *ZenTestnetFilterer) ParseApproval(log types.Log) (*ZenTestnetApproval, error) { + event := new(ZenTestnetApproval) + if err := _ZenTestnet.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZenTestnetInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ZenTestnet contract. +type ZenTestnetInitializedIterator struct { + Event *ZenTestnetInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZenTestnetInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZenTestnetInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZenTestnetInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZenTestnetInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZenTestnetInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZenTestnetInitialized represents a Initialized event raised by the ZenTestnet contract. +type ZenTestnetInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZenTestnet *ZenTestnetFilterer) FilterInitialized(opts *bind.FilterOpts) (*ZenTestnetInitializedIterator, error) { + + logs, sub, err := _ZenTestnet.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ZenTestnetInitializedIterator{contract: _ZenTestnet.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZenTestnet *ZenTestnetFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ZenTestnetInitialized) (event.Subscription, error) { + + logs, sub, err := _ZenTestnet.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZenTestnetInitialized) + if err := _ZenTestnet.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZenTestnet *ZenTestnetFilterer) ParseInitialized(log types.Log) (*ZenTestnetInitialized, error) { + event := new(ZenTestnetInitialized) + if err := _ZenTestnet.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZenTestnetOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ZenTestnet contract. +type ZenTestnetOwnershipTransferredIterator struct { + Event *ZenTestnetOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZenTestnetOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZenTestnetOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZenTestnetOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZenTestnetOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZenTestnetOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZenTestnetOwnershipTransferred represents a OwnershipTransferred event raised by the ZenTestnet contract. +type ZenTestnetOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ZenTestnet *ZenTestnetFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ZenTestnetOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ZenTestnet.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &ZenTestnetOwnershipTransferredIterator{contract: _ZenTestnet.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ZenTestnet *ZenTestnetFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ZenTestnetOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ZenTestnet.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZenTestnetOwnershipTransferred) + if err := _ZenTestnet.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ZenTestnet *ZenTestnetFilterer) ParseOwnershipTransferred(log types.Log) (*ZenTestnetOwnershipTransferred, error) { + event := new(ZenTestnetOwnershipTransferred) + if err := _ZenTestnet.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZenTestnetTransactionProcessedIterator is returned from FilterTransactionProcessed and is used to iterate over the raw logs and unpacked data for TransactionProcessed events raised by the ZenTestnet contract. +type ZenTestnetTransactionProcessedIterator struct { + Event *ZenTestnetTransactionProcessed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZenTestnetTransactionProcessedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZenTestnetTransactionProcessed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZenTestnetTransactionProcessed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZenTestnetTransactionProcessedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZenTestnetTransactionProcessedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZenTestnetTransactionProcessed represents a TransactionProcessed event raised by the ZenTestnet contract. +type ZenTestnetTransactionProcessed struct { + Sender common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransactionProcessed is a free log retrieval operation binding the contract event 0xe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1. +// +// Solidity: event TransactionProcessed(address sender, uint256 amount) +func (_ZenTestnet *ZenTestnetFilterer) FilterTransactionProcessed(opts *bind.FilterOpts) (*ZenTestnetTransactionProcessedIterator, error) { + + logs, sub, err := _ZenTestnet.contract.FilterLogs(opts, "TransactionProcessed") + if err != nil { + return nil, err + } + return &ZenTestnetTransactionProcessedIterator{contract: _ZenTestnet.contract, event: "TransactionProcessed", logs: logs, sub: sub}, nil +} + +// WatchTransactionProcessed is a free log subscription operation binding the contract event 0xe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1. +// +// Solidity: event TransactionProcessed(address sender, uint256 amount) +func (_ZenTestnet *ZenTestnetFilterer) WatchTransactionProcessed(opts *bind.WatchOpts, sink chan<- *ZenTestnetTransactionProcessed) (event.Subscription, error) { + + logs, sub, err := _ZenTestnet.contract.WatchLogs(opts, "TransactionProcessed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZenTestnetTransactionProcessed) + if err := _ZenTestnet.contract.UnpackLog(event, "TransactionProcessed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransactionProcessed is a log parse operation binding the contract event 0xe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1. +// +// Solidity: event TransactionProcessed(address sender, uint256 amount) +func (_ZenTestnet *ZenTestnetFilterer) ParseTransactionProcessed(log types.Log) (*ZenTestnetTransactionProcessed, error) { + event := new(ZenTestnetTransactionProcessed) + if err := _ZenTestnet.contract.UnpackLog(event, "TransactionProcessed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZenTestnetTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ZenTestnet contract. +type ZenTestnetTransferIterator struct { + Event *ZenTestnetTransfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZenTestnetTransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZenTestnetTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZenTestnetTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZenTestnetTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZenTestnetTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZenTestnetTransfer represents a Transfer event raised by the ZenTestnet contract. +type ZenTestnetTransfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_ZenTestnet *ZenTestnetFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ZenTestnetTransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZenTestnet.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &ZenTestnetTransferIterator{contract: _ZenTestnet.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_ZenTestnet *ZenTestnetFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ZenTestnetTransfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZenTestnet.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZenTestnetTransfer) + if err := _ZenTestnet.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_ZenTestnet *ZenTestnetFilterer) ParseTransfer(log types.Log) (*ZenTestnetTransfer, error) { + event := new(ZenTestnetTransfer) + if err := _ZenTestnet.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} From 2110a23f816eda6a119c3659fc06f126b8d8a499 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Wed, 9 Oct 2024 21:40:06 +0300 Subject: [PATCH 23/23] Added a deployment script. --- .../testnet/layer2/002_deploy_zen_base.ts | 56 ++++++++++++++++ contracts/src/zen/ZenTestnet.sol | 66 +++++++++++++++++++ tools/walletextension/rpcapi/net_api.go | 7 +- 3 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 contracts/deployment_scripts/testnet/layer2/002_deploy_zen_base.ts create mode 100644 contracts/src/zen/ZenTestnet.sol diff --git a/contracts/deployment_scripts/testnet/layer2/002_deploy_zen_base.ts b/contracts/deployment_scripts/testnet/layer2/002_deploy_zen_base.ts new file mode 100644 index 0000000000..5942e10d60 --- /dev/null +++ b/contracts/deployment_scripts/testnet/layer2/002_deploy_zen_base.ts @@ -0,0 +1,56 @@ +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import {DeployFunction} from 'hardhat-deploy/types'; +import { Receipt } from 'hardhat-deploy/dist/types'; +import { network } from 'hardhat'; + +/* + This script deploys the ZenTestnet contract on the l2 and whitelists it. +*/ + + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + const l2Network = hre; + + const l2Accounts = await l2Network.getNamedAccounts(); + + const networkConfig = await l2Network.network.provider.request({ + method: "net_config", + }); + + console.log(`net-cfg: ${JSON.stringify(networkConfig, null, " ")}`); + + const zenTestnet = await l2Network.deployments.deploy("ZenTestnet", { + from: l2Accounts.deployer, + log: true, + args: [], + proxy: { + proxyContract: "OpenZeppelinTransparentProxy", + execute: { + init: { + methodName: "initialize", + args: [networkConfig["TransactionPostProcessorAddress"]] + } + } + } + }); + console.log(`ZenBase deployed at ${zenTestnet.address}`); + + const signer = await l2Network.ethers.getSigner(l2Accounts.deployer); + const transactionPostProcessor = await l2Network.ethers.getContractAt( + 'TransactionPostProcessor', + networkConfig["TransactionPostProcessorAddress"], + signer + ); + + // TODO: add callback with the security epic when we add the EOA config and all the rules for access + // to system contracts + /* + const receipt = await transactionPostProcessor.addOnBlockEndCallback(zenTestnet.address); + if (receipt.status !== 1) { + throw new Error("Failed to register Zen token as a system callback"); + } + console.log(`Callback added at ${receipt.transactionHash}`); */ +} +export default func; +func.tags = ['ZenBase', 'ZenBase_deploy']; +func.dependencies = ['EthereumBridge']; diff --git a/contracts/src/zen/ZenTestnet.sol b/contracts/src/zen/ZenTestnet.sol new file mode 100644 index 0000000000..3c7a4cd259 --- /dev/null +++ b/contracts/src/zen/ZenTestnet.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: Apache 2 +pragma solidity ^0.8.0; + +/* +// Import OpenZeppelin Contracts +import "../system/TransactionDecoder.sol"; +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; + +*/ + +import "../system/OnBlockEndCallback.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; + + + + +interface ITransactionDecoder { + function recoverSender(Structs.Transaction calldata txData) external view returns (address sender); +} + +/** + * @title ZenBase + * @dev ERC20 Token with minting functionality. + */ +contract ZenTestnet is Initializable, OnBlockEndCallback, ERC20Upgradeable, OwnableUpgradeable { + using Structs for Structs.Transaction; + + event TransactionProcessed(address sender, uint256 amount); + /** + * @dev Constructor that gives msg.sender all of existing tokens. + * You can customize the initial supply as needed. + */ + constructor() { + _disableInitializers(); + } + + function initialize(address transactionPostProcessor) external initializer { + require(transactionPostProcessor != address(0), "Invalid transaction analyzer address"); + __ERC20_init("Zen", "ZEN"); + __Ownable_init(msg.sender); + _caller = transactionPostProcessor; + } + + + address private _caller; + + modifier onlyCaller() { + require(msg.sender == _caller, "Caller: caller is not the designated address"); + _; + } + + function onBlockEnd(Structs.Transaction[] calldata transactions) external onlyCaller { + if (transactions.length == 0) { + revert("No transactions to convert"); + } + // Implement custom logic here + for (uint256 i=0; i