diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ca697a52..d2bc8ad4c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Changelog +## [0.3.1] - 2023-04-13 -## [0.3.0] - 2023-02-20 +### Features +- Changed the rollup method from Layer1 CTC contract to EigenDA([#779](https://github.com/mantlenetworkio/mantle/pull/779)) +- Added support for data verification and recovery based on DA‘s api service in the Verifier node([#803](https://github.com/mantlenetworkio/mantle/pull/803)) + +### Improvements +- Optimized re-rollup process([#789](https://github.com/mantlenetworkio/mantle/pull/789)) +- Optimized code for contract upgrades([#798](https://github.com/mantlenetworkio/mantle/pull/798)) + +## [0.3.0](https://github.com/mantlenetworkio/mantle/commits/v0.3.0) - 2023-03-16 ### Features - Verifier syncs data from the DA network, verifies and generates new blocks([#638](https://github.com/mantlenetworkio/mantle/pull/638)) @@ -72,4 +81,4 @@ - MPC validators module in Layer 2 network, to minimize the trust risk of L2 execution results by threshold signature scheme(TSS). - Native Token replacement in Layer 2 Network, to empower BitDAO's ecosystem by replacing the native token with BIT. - Token Reward, to inspire community, organization and individual to run a l2geth-node and TSS-node. -- Gas fee adjustment, the Bit destruction mechanism will be triggered after collecting enough GasFee in the special contract. +- Gas fee adjustment, the Bit destruction mechanism will be triggered after collecting enough GasFee in the special contract. \ No newline at end of file diff --git a/batch-submitter/Makefile b/batch-submitter/Makefile index a712fc69c..276400ba3 100644 --- a/batch-submitter/Makefile +++ b/batch-submitter/Makefile @@ -9,6 +9,7 @@ LDFLAGS := -ldflags "$(LDFLAGSSTRING)" CTC_ABI_ARTIFACT := ../packages/contracts/artifacts/contracts/L1/rollup/CanonicalTransactionChain.sol/CanonicalTransactionChain.json SCC_ABI_ARTIFACT := ../packages/contracts/artifacts/contracts/L1/rollup/StateCommitmentChain.sol/StateCommitmentChain.json +DA_ABI_ARTIFACT := ../packages/contracts/artifacts/contracts/da/BVM_EigenDataLayrChain.sol/BVM_EigenDataLayrChain.json batch-submitter: env GO111MODULE=on go build -v $(LDFLAGS) ./cmd/batch-submitter @@ -22,7 +23,7 @@ test: lint: golangci-lint run ./... -bindings: bindings-ctc bindings-scc +bindings: bindings-ctc bindings-scc bindings-da bindings-ctc: $(eval temp := $(shell mktemp)) @@ -56,11 +57,28 @@ bindings-scc: rm $(temp) +bindings-da: + $(eval temp := $(shell mktemp)) + + cat $(DA_ABI_ARTIFACT) \ + | jq -r .bytecode > $(temp) + + cat $(DA_ABI_ARTIFACT) \ + | jq .abi \ + | abigen --pkg da \ + --abi - \ + --out bindings/da/bvm_eigen_datalayr_chain.go \ + --type BVM_EigenDataLayrChain \ + --bin $(temp) + + rm $(temp) + .PHONY: \ batch-submitter \ bindings \ bindings-ctc \ bindings-scc \ + bindings-da \ clean \ test \ lint diff --git a/batch-submitter/batch_submitter.go b/batch-submitter/batch_submitter.go index 55cd428c3..1da162863 100644 --- a/batch-submitter/batch_submitter.go +++ b/batch-submitter/batch_submitter.go @@ -2,6 +2,8 @@ package batchsubmitter import ( "context" + ethc "github.com/ethereum/go-ethereum/common" + "github.com/mantlenetworkio/mantle/l2geth/common" "os" "time" @@ -132,6 +134,8 @@ func Main(gitVersion string) func(ctx *cli.Context) error { MinTxSize: cfg.MinL1TxSize, MaxTxSize: cfg.MaxL1TxSize, MaxPlaintextBatchSize: cfg.MaxPlaintextBatchSize, + DaUpgradeBlock: cfg.DaUpgradeBlock, + DAAddr: ethc.Address(common.HexToAddress(cfg.DAAddress)), CTCAddr: ctcAddress, ChainID: chainID, PrivKey: sequencerPrivKey, diff --git a/batch-submitter/bindings/ctc/canonical_transaction_chain.go b/batch-submitter/bindings/ctc/canonical_transaction_chain.go index 121091021..5990bebec 100644 --- a/batch-submitter/bindings/ctc/canonical_transaction_chain.go +++ b/batch-submitter/bindings/ctc/canonical_transaction_chain.go @@ -37,8 +37,8 @@ type LibBVMCodecQueueElement struct { // CanonicalTransactionChainMetaData contains all meta data concerning the CanonicalTransactionChain contract. var CanonicalTransactionChainMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_libAddressManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxTransactionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2GasDiscountDivisor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_enqueueGasCost\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"l2GasDiscountDivisor\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"enqueueGasCost\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"enqueueL2GasPrepaid\",\"type\":\"uint256\"}],\"name\":\"L2GasParamsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_startingQueueIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numQueueElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"name\":\"QueueBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_startingQueueIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numQueueElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"name\":\"SequencerBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_batchRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_batchSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_prevTotalElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"TransactionBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_l1TxOrigin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"TransactionEnqueued\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_ROLLUP_TX_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_ROLLUP_TX_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"appendSequencerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batches\",\"outputs\":[{\"internalType\":\"contractIChainStorageContainer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"enqueue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enqueueGasCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enqueueL2GasPrepaid\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastBlockNumber\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastTimestamp\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextQueueIndex\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumPendingQueueElements\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getQueueElement\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transactionHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint40\",\"name\":\"timestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"blockNumber\",\"type\":\"uint40\"}],\"internalType\":\"structLib_BVMCodec.QueueElement\",\"name\":\"_element\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getQueueLength\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBatches\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalBatches\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalElements\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2GasDiscountDivisor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"libAddressManager\",\"outputs\":[{\"internalType\":\"contractLib_AddressManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTransactionGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2GasDiscountDivisor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_enqueueGasCost\",\"type\":\"uint256\"}],\"name\":\"setGasParams\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5060405162001ad438038062001ad483398101604081905261003191610072565b600080546001600160a01b0319166001600160a01b03861617905560048390556002829055600181905561006581836100bd565b600355506100ea92505050565b6000806000806080858703121561008857600080fd5b84516001600160a01b038116811461009f57600080fd5b60208601516040870151606090970151919890975090945092505050565b60008160001904831182151516156100e557634e487b7160e01b600052601160045260246000fd5b500290565b6119da80620000fa6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063876ed5cb116100cd578063d0f8934411610081578063e654b1fb11610066578063e654b1fb146102c0578063edcc4a45146102c9578063f722b41a146102dc57600080fd5b8063d0f89344146102b0578063e561dddc146102b857600080fd5b8063b8f77005116100b2578063b8f7700514610297578063ccf987c81461029f578063cfdf677e146102a857600080fd5b8063876ed5cb146102855780638d38c6c11461028e57600080fd5b80635ae6256d1161012457806378f4b2f21161010957806378f4b2f2146102645780637a167a8a1461026e5780637aa63a861461027d57600080fd5b80635ae6256d146102475780636fee07e01461024f57600080fd5b80632a7f18be116101555780632a7f18be146101d25780633789977014610216578063461a44781461023457600080fd5b80630b3dfa9714610171578063299ca4781461018d575b600080fd5b61017a60035481565b6040519081526020015b60405180910390f35b6000546101ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101e56101e0366004611403565b6102e4565b604080518251815260208084015164ffffffffff908116918301919091529282015190921690820152606001610184565b61021e610362565b60405164ffffffffff9091168152602001610184565b6101ad6102423660046114df565b610376565b61021e610423565b61026261025d366004611555565b610437565b005b61017a620186a081565b60055464ffffffffff1661021e565b61017a610899565b61017a61c35081565b61017a60045481565b60065461021e565b61017a60025481565b6101ad6108b4565b6102626108dc565b61017a610df8565b61017a60015481565b6102626102d73660046115c2565b610e7f565b61021e611016565b604080516060810182526000808252602082018190529181019190915260068281548110610314576103146115e4565b6000918252602091829020604080516060810182526002909302909101805483526001015464ffffffffff808216948401949094526501000000000090049092169181019190915292915050565b60008061036d611032565b50949350505050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac1906103cd90859060040161167e565b60206040518083038186803b1580156103e557600080fd5b505afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d9190611698565b92915050565b60008061042e611032565b95945050505050565b61c350815111156104cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f5472616e73616374696f6e20646174612073697a652065786365656473206d6160448201527f78696d756d20666f7220726f6c6c7570207472616e73616374696f6e2e00000060648201526084015b60405180910390fd5b600454821115610561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f5472616e73616374696f6e20676173206c696d69742065786365656473206d6160448201527f78696d756d20666f7220726f6c6c7570207472616e73616374696f6e2e00000060648201526084016104c6565b620186a08210156105f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5472616e73616374696f6e20676173206c696d697420746f6f206c6f7720746f60448201527f20656e71756575652e000000000000000000000000000000000000000000000060648201526084016104c6565b6003548211156106dc5760006002546003548461061191906116e4565b61061b91906116fb565b905060005a90508181116106b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e73756666696369656e742067617320666f72204c322072617465206c696d60448201527f6974696e67206275726e2e00000000000000000000000000000000000000000060648201526084016104c6565b60005b825a6106c090846116e4565b10156106d857806106d081611736565b9150506106b4565b5050505b6000333214156106ed575033610706565b5033731111000000000000000000000000000000001111015b60008185858560405160200161071f949392919061176f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060608401835280845264ffffffffff42811692850192835243811693850193845260068054600181810183556000838152975160029092027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f81019290925594517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090910180549651841665010000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090971691909316179490941790559154919350610825916116e4565b9050808673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f4b388aecf9fa6cc92253704e5975a6129a4f735bdbd99567df4ed0094ee4ceb5888842604051610889939291906117b8565b60405180910390a4505050505050565b6000806108a4611032565b50505064ffffffffff1692915050565b60006108d760405180606001604052806021815260200161198460219139610376565b905090565b60043560d81c60093560e890811c90600c35901c6108f8610899565b8364ffffffffff161461098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084016104c6565b6109cb6040518060400160405280600d81526020017f42564d5f53657175656e63657200000000000000000000000000000000000000815250610376565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f46756e6374696f6e2063616e206f6e6c792062652063616c6c6564206279207460448201527f68652053657175656e6365722e0000000000000000000000000000000000000060648201526084016104c6565b6000610a9762ffffff831660106117e1565b610aa290600f61181e565b905064ffffffffff8116361015610b3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4e6f7420656e6f756768204261746368436f6e74657874732070726f7669646560448201527f642e00000000000000000000000000000000000000000000000000000000000060648201526084016104c6565b6005546040805160808101825260008082526020820181905291810182905260608101829052909164ffffffffff169060005b8562ffffff168163ffffffff161015610bcc576000610b928263ffffffff166110ed565b8051909350839150610ba49086611836565b9450826020015184610bb6919061185e565b9350508080610bc49061187e565b915050610b6e565b5060065464ffffffffff83161115610c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f417474656d7074656420746f20617070656e64206d6f726520656c656d656e7460448201527f73207468616e2061726520617661696c61626c6520696e20746865207175657560648201527f652e000000000000000000000000000000000000000000000000000000000000608482015260a4016104c6565b6000610c9d8462ffffff89166118a2565b63ffffffff169050600080836020015160001415610cc657505060408201516060830151610d37565b60006006610cd56001886118c7565b64ffffffffff1681548110610cec57610cec6115e4565b6000918252602091829020604080516060810182526002909302909101805483526001015464ffffffffff808216948401859052650100000000009091041691018190529093509150505b610d5b610d456001436116e4565b408a62ffffff168564ffffffffff168585611174565b7f602f1aeac0ca2e7a13e281a9ef0ad7838542712ce16780fa2ecffd351f05f899610d8684876118c7565b84610d8f610899565b6040805164ffffffffff94851681529390921660208401529082015260600160405180910390a15050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001664ffffffffff949094169390931790925550505050505050565b6000610e026108b4565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4757600080fd5b505afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d791906118e5565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ee557600080fd5b505afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190611698565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f6e6c792063616c6c61626c6520627920746865204275726e2041646d696e2e60448201526064016104c6565b60018190556002829055610fc581836117e1565b60038190556002546001546040805192835260208301919091528101919091527fc6ed75e96b8b18b71edc1a6e82a9d677f8268c774a262c624eeb2cf0a8b3e07e9060600160405180910390a15050565b6005546006546000916108d79164ffffffffff909116906118c7565b60008060008060006110426108b4565b73ffffffffffffffffffffffffffffffffffffffff1663ccf8f9696040518163ffffffff1660e01b815260040160206040518083038186803b15801561108757600080fd5b505afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf91906118fe565b64ffffffffff602882901c811697605083901c82169750607883901c8216965060a09290921c169350915050565b6111186040518060800160405280600081526020016000815260200160008152602001600081525090565b60006111256010846117e1565b61113090600f61181e565b60408051608081018252823560e890811c82526003840135901c6020820152600683013560d890811c92820192909252600b90920135901c60608201529392505050565b600061117e6108b4565b905060008061118b611032565b50509150915060006040518060c001604052808573ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e457600080fd5b505afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c91906118e5565b81526020018a81526020018981526020018464ffffffffff16815260200160405180602001604052806000815250815260200160405180602001604052806000815250815250905080600001517fa47512905cf577d4cfae2efc3df461008ddb7234e91ce7f4eefcdb51e1077ccf82602001518360400151846060015185608001518660a001516040516112b4959493929190611940565b60405180910390a260006112c7826113ba565b905060006113028360400151866112de919061185e565b6112e88b8761185e565b602890811b9190911760508b901b1760788a901b17901b90565b6040517f2015276c000000000000000000000000000000000000000000000000000000008152600481018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008216602482015290915073ffffffffffffffffffffffffffffffffffffffff871690632015276c90604401600060405180830381600087803b15801561139557600080fd5b505af11580156113a9573d6000803e3d6000fd5b505050505050505050505050505050565b6020808201516040808401516060850151608086015160a087015193516000966113e696959101611940565b604051602081830303815290604052805190602001209050919050565b60006020828403121561141557600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156114665761146661141c565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156114ac576114ac61141c565b816040528093508581528686860111156114c557600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156114f157600080fd5b813567ffffffffffffffff81111561150857600080fd5b8201601f8101841361151957600080fd5b6115288482356020840161144b565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461155257600080fd5b50565b60008060006060848603121561156a57600080fd5b833561157581611530565b925060208401359150604084013567ffffffffffffffff81111561159857600080fd5b8401601f810186136115a957600080fd5b6115b88682356020840161144b565b9150509250925092565b600080604083850312156115d557600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815180845260005b818110156116395760208185018101518683018201520161161d565b8181111561164b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116916020830184611613565b9392505050565b6000602082840312156116aa57600080fd5b815161169181611530565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156116f6576116f66116b5565b500390565b600082611731577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611768576117686116b5565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526117ae6080830184611613565b9695505050505050565b8381526060602082015260006117d16060830185611613565b9050826040830152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611819576118196116b5565b500290565b60008219821115611831576118316116b5565b500190565b600063ffffffff808316818516808303821115611855576118556116b5565b01949350505050565b600064ffffffffff808316818516808303821115611855576118556116b5565b600063ffffffff80831681811415611898576118986116b5565b6001019392505050565b600063ffffffff838116908316818110156118bf576118bf6116b5565b039392505050565b600064ffffffffff838116908316818110156118bf576118bf6116b5565b6000602082840312156118f757600080fd5b5051919050565b60006020828403121561191057600080fd5b81517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008116811461169157600080fd5b85815284602082015283604082015260a06060820152600061196560a0830185611613565b82810360808401526119778185611613565b9897505050505050505056fe436861696e53746f72616765436f6e7461696e65722d4354432d62617463686573a26469706673582212207b62cab53b3294af5970e336a94aa42e59c862f1a671bc562ac7e93b7e022b0964736f6c63430008090033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_libAddressManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxTransactionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2GasDiscountDivisor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_enqueueGasCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_mt_batcher\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"l2GasDiscountDivisor\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"enqueueGasCost\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"enqueueL2GasPrepaid\",\"type\":\"uint256\"}],\"name\":\"L2GasParamsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_startingQueueIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numQueueElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"name\":\"QueueBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_startingQueueIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numQueueElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"name\":\"SequencerBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_batchRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_batchSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_prevTotalElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"TransactionBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_l1TxOrigin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"TransactionEnqueued\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_ROLLUP_TX_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_ROLLUP_TX_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint40\",\"name\":\"_shouldStartAtElement\",\"type\":\"uint40\"},{\"internalType\":\"uint24\",\"name\":\"_totalElementsToAppend\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"_numSequencedTransactions\",\"type\":\"uint32\"},{\"internalType\":\"uint40\",\"name\":\"_numSubsequentQueueTransactions\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"_timestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"_blockNumber\",\"type\":\"uint40\"}],\"name\":\"appendDaSequencerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"appendSequencerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batches\",\"outputs\":[{\"internalType\":\"contractIChainStorageContainer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"enqueue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enqueueGasCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enqueueL2GasPrepaid\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastBlockNumber\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastTimestamp\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextQueueIndex\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumPendingQueueElements\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getQueueElement\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transactionHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint40\",\"name\":\"timestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"blockNumber\",\"type\":\"uint40\"}],\"internalType\":\"structLib_BVMCodec.QueueElement\",\"name\":\"_element\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getQueueLength\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBatches\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalBatches\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalElements\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2GasDiscountDivisor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"libAddressManager\",\"outputs\":[{\"internalType\":\"contractLib_AddressManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTransactionGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mt_batcher\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2GasDiscountDivisor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_enqueueGasCost\",\"type\":\"uint256\"}],\"name\":\"setGasParams\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162001f7938038062001f798339810160408190526200003491620000b5565b600080546001600160a01b0319166001600160a01b0387161790556004849055600283905560018290556200006a82846200010a565b600355600580546001600160a01b0319166001600160a01b0392909216919091179055506200013892505050565b80516001600160a01b0381168114620000b057600080fd5b919050565b600080600080600060a08688031215620000ce57600080fd5b620000d98662000098565b9450602086015193506040860151925060608601519150620000fe6080870162000098565b90509295509295909350565b60008160001904831182151516156200013357634e487b7160e01b600052601160045260246000fd5b500290565b611e3180620001486000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063876ed5cb116100d8578063d0f893441161008c578063edcc4a4511610066578063edcc4a4514610317578063f4f7911d1461032a578063f722b41a1461033d57600080fd5b8063d0f89344146102fe578063e561dddc14610306578063e654b1fb1461030e57600080fd5b8063b8f77005116100bd578063b8f77005146102e5578063ccf987c8146102ed578063cfdf677e146102f657600080fd5b8063876ed5cb146102d35780638d38c6c1146102dc57600080fd5b8063461a44781161013a57806378f4b2f21161011457806378f4b2f21461029a5780637a167a8a146102a45780637aa63a86146102cb57600080fd5b8063461a44781461026a5780635ae6256d1461027d5780636fee07e01461028557600080fd5b8063299ca4781161016b578063299ca478146101e85780632a7f18be14610208578063378997701461024c57600080fd5b8063016f906f146101875780630b3dfa97146101d1575b600080fd5b6005546101a79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101da60035481565b6040519081526020016101c8565b6000546101a79073ffffffffffffffffffffffffffffffffffffffff1681565b61021b6102163660046117b7565b610345565b604080518251815260208084015164ffffffffff9081169183019190915292820151909216908201526060016101c8565b6102546103c3565b60405164ffffffffff90911681526020016101c8565b6101a7610278366004611893565b6103d7565b610254610484565b610298610293366004611909565b610498565b005b6101da620186a081565b60055474010000000000000000000000000000000000000000900464ffffffffff16610254565b6101da610892565b6101da61c35081565b6101da60045481565b600654610254565b6101da60025481565b6101a76108ad565b6102986108d5565b6101da610db9565b6101da60015481565b610298610325366004611976565b610e40565b6102986103383660046119b2565b610fbd565b6102546113b3565b60408051606081018252600080825260208201819052918101919091526006828154811061037557610375611a3b565b6000918252602091829020604080516060810182526002909302909101805483526001015464ffffffffff808216948401949094526501000000000090049092169181019190915292915050565b6000806103ce6113e6565b50949350505050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061042e908590600401611ad5565b60206040518083038186803b15801561044657600080fd5b505afa15801561045a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047e9190611aef565b92915050565b60008061048f6113e6565b95945050505050565b61c350815111156105165760405162461bcd60e51b815260206004820152603d60248201527f5472616e73616374696f6e20646174612073697a652065786365656473206d6160448201527f78696d756d20666f7220726f6c6c7570207472616e73616374696f6e2e00000060648201526084015b60405180910390fd5b60045482111561058e5760405162461bcd60e51b815260206004820152603d60248201527f5472616e73616374696f6e20676173206c696d69742065786365656473206d6160448201527f78696d756d20666f7220726f6c6c7570207472616e73616374696f6e2e000000606482015260840161050d565b620186a08210156106075760405162461bcd60e51b815260206004820152602960248201527f5472616e73616374696f6e20676173206c696d697420746f6f206c6f7720746f60448201527f20656e71756575652e0000000000000000000000000000000000000000000000606482015260840161050d565b6003548211156106d5576000600254600354846106249190611b3b565b61062e9190611b52565b905060005a90508181116106aa5760405162461bcd60e51b815260206004820152602b60248201527f496e73756666696369656e742067617320666f72204c322072617465206c696d60448201527f6974696e67206275726e2e000000000000000000000000000000000000000000606482015260840161050d565b60005b825a6106b99084611b3b565b10156106d157806106c981611b8d565b9150506106ad565b5050505b6000333214156106e65750336106ff565b5033731111000000000000000000000000000000001111015b6000818585856040516020016107189493929190611bc6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060608401835280845264ffffffffff42811692850192835243811693850193845260068054600181810183556000838152975160029092027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f81019290925594517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090910180549651841665010000000000027fffffffffffffffffffffffffffffffffffffffffffff000000000000000000009097169190931617949094179055915491935061081e91611b3b565b9050808673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f4b388aecf9fa6cc92253704e5975a6129a4f735bdbd99567df4ed0094ee4ceb588884260405161088293929190611c0f565b60405180910390a4505050505050565b60008061089d6113e6565b50505064ffffffffff1692915050565b60006108d0604051806060016040528060218152602001611ddb602191396103d7565b905090565b60043560d81c60093560e890811c90600c35901c6108f1610892565b8364ffffffffff161461096c5760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e000000606482015260840161050d565b6109aa6040518060400160405280600d81526020017f42564d5f53657175656e636572000000000000000000000000000000000000008152506103d7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4a5760405162461bcd60e51b815260206004820152602d60248201527f46756e6374696f6e2063616e206f6e6c792062652063616c6c6564206279207460448201527f68652053657175656e6365722e00000000000000000000000000000000000000606482015260840161050d565b6000610a5c62ffffff83166010611c38565b610a6790600f611c75565b905064ffffffffff8116361015610ae65760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f756768204261746368436f6e74657874732070726f7669646560448201527f642e000000000000000000000000000000000000000000000000000000000000606482015260840161050d565b6005546040805160808101825260008082526020820181905291810182905260608101829052909174010000000000000000000000000000000000000000900464ffffffffff169060005b8562ffffff168163ffffffff161015610b8f576000610b558263ffffffff166114a1565b8051909350839150610b679086611c8d565b9450826020015184610b799190611cb5565b9350508080610b8790611cd5565b915050610b31565b5060065464ffffffffff83161115610c355760405162461bcd60e51b815260206004820152604260248201527f417474656d7074656420746f20617070656e64206d6f726520656c656d656e7460448201527f73207468616e2061726520617661696c61626c6520696e20746865207175657560648201527f652e000000000000000000000000000000000000000000000000000000000000608482015260a40161050d565b6000610c468462ffffff8916611cf9565b63ffffffff169050600080836020015160001415610c6f57505060408201516060830151610ce0565b60006006610c7e600188611d1e565b64ffffffffff1681548110610c9557610c95611a3b565b6000918252602091829020604080516060810182526002909302909101805483526001015464ffffffffff808216948401859052650100000000009091041691018190529093509150505b610d04610cee600143611b3b565b408a62ffffff168564ffffffffff168585611528565b7f602f1aeac0ca2e7a13e281a9ef0ad7838542712ce16780fa2ecffd351f05f899610d2f8487611d1e565b84610d38610892565b6040805164ffffffffff94851681529390921660208401529082015260600160405180910390a150506005805464ffffffffff90941674010000000000000000000000000000000000000000027fffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffff9094169390931790925550505050505050565b6000610dc36108ad565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015610e0857600080fd5b505afa158015610e1c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d09190611d3c565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ea657600080fd5b505afa158015610eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ede9190611aef565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f585760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792063616c6c61626c6520627920746865204275726e2041646d696e2e604482015260640161050d565b60018190556002829055610f6c8183611c38565b60038190556002546001546040805192835260208301919091528101919091527fc6ed75e96b8b18b71edc1a6e82a9d677f8268c774a262c624eeb2cf0a8b3e07e9060600160405180910390a15050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561102357600080fd5b505afa158015611037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105b9190611aef565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110d55760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792063616c6c61626c6520627920746865206d7420626174636865722e604482015260640161050d565b85856110df610892565b8264ffffffffff161461115a5760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e000000606482015260840161050d565b600554869060009061118c90889074010000000000000000000000000000000000000000900464ffffffffff16611cb5565b60065490915064ffffffffff821611156112345760405162461bcd60e51b815260206004820152604260248201527f417474656d7074656420746f20617070656e64206d6f726520656c656d656e7460448201527f73207468616e2061726520617661696c61626c6520696e20746865207175657560648201527f652e000000000000000000000000000000000000000000000000000000000000608482015260a40161050d565b60006112458362ffffff8616611cf9565b63ffffffff16905060008064ffffffffff8a166112665750879050866112d7565b60006006611275600187611d1e565b64ffffffffff168154811061128c5761128c611a3b565b6000918252602091829020604080516060810182526002909302909101805483526001015464ffffffffff808216948401859052650100000000009091041691018190529093509150505b6112fb6112e5600143611b3b565b408762ffffff168564ffffffffff168585611528565b7f602f1aeac0ca2e7a13e281a9ef0ad7838542712ce16780fa2ecffd351f05f8996113268486611d1e565b8461132f610892565b6040805164ffffffffff94851681529390921660208401529082015260600160405180910390a150506005805464ffffffffff90931674010000000000000000000000000000000000000000027fffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffff9093169290921790915550505050505050505050565b6005546006546000916108d0917401000000000000000000000000000000000000000090910464ffffffffff1690611d1e565b60008060008060006113f66108ad565b73ffffffffffffffffffffffffffffffffffffffff1663ccf8f9696040518163ffffffff1660e01b815260040160206040518083038186803b15801561143b57600080fd5b505afa15801561144f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114739190611d55565b64ffffffffff602882901c811697605083901c82169750607883901c8216965060a09290921c169350915050565b6114cc6040518060800160405280600081526020016000815260200160008152602001600081525090565b60006114d9601084611c38565b6114e490600f611c75565b60408051608081018252823560e890811c82526003840135901c6020820152600683013560d890811c92820192909252600b90920135901c60608201529392505050565b60006115326108ad565b905060008061153f6113e6565b50509150915060006040518060c001604052808573ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b15801561159857600080fd5b505afa1580156115ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d09190611d3c565b81526020018a81526020018981526020018464ffffffffff16815260200160405180602001604052806000815250815260200160405180602001604052806000815250815250905080600001517fa47512905cf577d4cfae2efc3df461008ddb7234e91ce7f4eefcdb51e1077ccf82602001518360400151846060015185608001518660a00151604051611668959493929190611d97565b60405180910390a2600061167b8261176e565b905060006116b68360400151866116929190611cb5565b61169c8b87611cb5565b602890811b9190911760508b901b1760788a901b17901b90565b6040517f2015276c000000000000000000000000000000000000000000000000000000008152600481018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008216602482015290915073ffffffffffffffffffffffffffffffffffffffff871690632015276c90604401600060405180830381600087803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b505050505050505050505050505050565b6020808201516040808401516060850151608086015160a0870151935160009661179a96959101611d97565b604051602081830303815290604052805190602001209050919050565b6000602082840312156117c957600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111561181a5761181a6117d0565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611860576118606117d0565b8160405280935085815286868601111561187957600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156118a557600080fd5b813567ffffffffffffffff8111156118bc57600080fd5b8201601f810184136118cd57600080fd5b6118dc848235602084016117ff565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461190657600080fd5b50565b60008060006060848603121561191e57600080fd5b8335611929816118e4565b925060208401359150604084013567ffffffffffffffff81111561194c57600080fd5b8401601f8101861361195d57600080fd5b61196c868235602084016117ff565b9150509250925092565b6000806040838503121561198957600080fd5b50508035926020909101359150565b803564ffffffffff811681146119ad57600080fd5b919050565b60008060008060008060c087890312156119cb57600080fd5b6119d487611998565b9550602087013562ffffff811681146119ec57600080fd5b9450604087013563ffffffff81168114611a0557600080fd5b9350611a1360608801611998565b9250611a2160808801611998565b9150611a2f60a08801611998565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815180845260005b81811015611a9057602081850181015186830182015201611a74565b81811115611aa2576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ae86020830184611a6a565b9392505050565b600060208284031215611b0157600080fd5b8151611ae8816118e4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611b4d57611b4d611b0c565b500390565b600082611b88577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611bbf57611bbf611b0c565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611c056080830184611a6a565b9695505050505050565b838152606060208201526000611c286060830185611a6a565b9050826040830152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c7057611c70611b0c565b500290565b60008219821115611c8857611c88611b0c565b500190565b600063ffffffff808316818516808303821115611cac57611cac611b0c565b01949350505050565b600064ffffffffff808316818516808303821115611cac57611cac611b0c565b600063ffffffff80831681811415611cef57611cef611b0c565b6001019392505050565b600063ffffffff83811690831681811015611d1657611d16611b0c565b039392505050565b600064ffffffffff83811690831681811015611d1657611d16611b0c565b600060208284031215611d4e57600080fd5b5051919050565b600060208284031215611d6757600080fd5b81517fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000081168114611ae857600080fd5b85815284602082015283604082015260a060608201526000611dbc60a0830185611a6a565b8281036080840152611dce8185611a6a565b9897505050505050505056fe436861696e53746f72616765436f6e7461696e65722d4354432d62617463686573a2646970667358221220e9d0405c248be67b1a2c789eeb753a0a163e82efe3c819a462f405db5891e94d64736f6c63430008090033", } // CanonicalTransactionChainABI is the input ABI used to generate the binding from. @@ -50,7 +50,7 @@ var CanonicalTransactionChainABI = CanonicalTransactionChainMetaData.ABI var CanonicalTransactionChainBin = CanonicalTransactionChainMetaData.Bin // DeployCanonicalTransactionChain deploys a new Ethereum contract, binding an instance of CanonicalTransactionChain to it. -func DeployCanonicalTransactionChain(auth *bind.TransactOpts, backend bind.ContractBackend, _libAddressManager common.Address, _maxTransactionGasLimit *big.Int, _l2GasDiscountDivisor *big.Int, _enqueueGasCost *big.Int) (common.Address, *types.Transaction, *CanonicalTransactionChain, error) { +func DeployCanonicalTransactionChain(auth *bind.TransactOpts, backend bind.ContractBackend, _libAddressManager common.Address, _maxTransactionGasLimit *big.Int, _l2GasDiscountDivisor *big.Int, _enqueueGasCost *big.Int, _mt_batcher common.Address) (common.Address, *types.Transaction, *CanonicalTransactionChain, error) { parsed, err := CanonicalTransactionChainMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -59,7 +59,7 @@ func DeployCanonicalTransactionChain(auth *bind.TransactOpts, backend bind.Contr return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(CanonicalTransactionChainBin), backend, _libAddressManager, _maxTransactionGasLimit, _l2GasDiscountDivisor, _enqueueGasCost) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(CanonicalTransactionChainBin), backend, _libAddressManager, _maxTransactionGasLimit, _l2GasDiscountDivisor, _enqueueGasCost, _mt_batcher) if err != nil { return common.Address{}, nil, nil, err } @@ -704,6 +704,37 @@ func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) MaxTra return _CanonicalTransactionChain.Contract.MaxTransactionGasLimit(&_CanonicalTransactionChain.CallOpts) } +// MtBatcher is a free data retrieval call binding the contract method 0x016f906f. +// +// Solidity: function mt_batcher() view returns(address) +func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) MtBatcher(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CanonicalTransactionChain.contract.Call(opts, &out, "mt_batcher") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// MtBatcher is a free data retrieval call binding the contract method 0x016f906f. +// +// Solidity: function mt_batcher() view returns(address) +func (_CanonicalTransactionChain *CanonicalTransactionChainSession) MtBatcher() (common.Address, error) { + return _CanonicalTransactionChain.Contract.MtBatcher(&_CanonicalTransactionChain.CallOpts) +} + +// MtBatcher is a free data retrieval call binding the contract method 0x016f906f. +// +// Solidity: function mt_batcher() view returns(address) +func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) MtBatcher() (common.Address, error) { + return _CanonicalTransactionChain.Contract.MtBatcher(&_CanonicalTransactionChain.CallOpts) +} + // Resolve is a free data retrieval call binding the contract method 0x461a4478. // // Solidity: function resolve(string _name) view returns(address) @@ -735,6 +766,27 @@ func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) Resolv return _CanonicalTransactionChain.Contract.Resolve(&_CanonicalTransactionChain.CallOpts, _name) } +// AppendDaSequencerBatch is a paid mutator transaction binding the contract method 0xf4f7911d. +// +// Solidity: function appendDaSequencerBatch(uint40 _shouldStartAtElement, uint24 _totalElementsToAppend, uint32 _numSequencedTransactions, uint40 _numSubsequentQueueTransactions, uint40 _timestamp, uint40 _blockNumber) returns() +func (_CanonicalTransactionChain *CanonicalTransactionChainTransactor) AppendDaSequencerBatch(opts *bind.TransactOpts, _shouldStartAtElement *big.Int, _totalElementsToAppend *big.Int, _numSequencedTransactions uint32, _numSubsequentQueueTransactions *big.Int, _timestamp *big.Int, _blockNumber *big.Int) (*types.Transaction, error) { + return _CanonicalTransactionChain.contract.Transact(opts, "appendDaSequencerBatch", _shouldStartAtElement, _totalElementsToAppend, _numSequencedTransactions, _numSubsequentQueueTransactions, _timestamp, _blockNumber) +} + +// AppendDaSequencerBatch is a paid mutator transaction binding the contract method 0xf4f7911d. +// +// Solidity: function appendDaSequencerBatch(uint40 _shouldStartAtElement, uint24 _totalElementsToAppend, uint32 _numSequencedTransactions, uint40 _numSubsequentQueueTransactions, uint40 _timestamp, uint40 _blockNumber) returns() +func (_CanonicalTransactionChain *CanonicalTransactionChainSession) AppendDaSequencerBatch(_shouldStartAtElement *big.Int, _totalElementsToAppend *big.Int, _numSequencedTransactions uint32, _numSubsequentQueueTransactions *big.Int, _timestamp *big.Int, _blockNumber *big.Int) (*types.Transaction, error) { + return _CanonicalTransactionChain.Contract.AppendDaSequencerBatch(&_CanonicalTransactionChain.TransactOpts, _shouldStartAtElement, _totalElementsToAppend, _numSequencedTransactions, _numSubsequentQueueTransactions, _timestamp, _blockNumber) +} + +// AppendDaSequencerBatch is a paid mutator transaction binding the contract method 0xf4f7911d. +// +// Solidity: function appendDaSequencerBatch(uint40 _shouldStartAtElement, uint24 _totalElementsToAppend, uint32 _numSequencedTransactions, uint40 _numSubsequentQueueTransactions, uint40 _timestamp, uint40 _blockNumber) returns() +func (_CanonicalTransactionChain *CanonicalTransactionChainTransactorSession) AppendDaSequencerBatch(_shouldStartAtElement *big.Int, _totalElementsToAppend *big.Int, _numSequencedTransactions uint32, _numSubsequentQueueTransactions *big.Int, _timestamp *big.Int, _blockNumber *big.Int) (*types.Transaction, error) { + return _CanonicalTransactionChain.Contract.AppendDaSequencerBatch(&_CanonicalTransactionChain.TransactOpts, _shouldStartAtElement, _totalElementsToAppend, _numSequencedTransactions, _numSubsequentQueueTransactions, _timestamp, _blockNumber) +} + // AppendSequencerBatch is a paid mutator transaction binding the contract method 0xd0f89344. // // Solidity: function appendSequencerBatch() returns() diff --git a/batch-submitter/bindings/da/bvm_eigen_datalayr_chain.go b/batch-submitter/bindings/da/bvm_eigen_datalayr_chain.go new file mode 100644 index 000000000..dabe82b7e --- /dev/null +++ b/batch-submitter/bindings/da/bvm_eigen_datalayr_chain.go @@ -0,0 +1,1868 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package da + +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 +) + +// BN254G1Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G1Point struct { + X *big.Int + Y *big.Int +} + +// BN254G2Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G2Point struct { + X [2]*big.Int + Y [2]*big.Int +} + +// BVMEigenDataLayrChainBatchRollupBlock is an auto generated low-level Go binding around an user-defined struct. +type BVMEigenDataLayrChainBatchRollupBlock struct { + StartL2BlockNumber *big.Int + EndBL2BlockNumber *big.Int + IsReRollup bool +} + +// BVMEigenDataLayrChainDisclosureProofs is an auto generated low-level Go binding around an user-defined struct. +type BVMEigenDataLayrChainDisclosureProofs struct { + Header []byte + FirstChunkNumber uint32 + Polys [][]byte + MultiRevealProofs []DataLayrDisclosureLogicMultiRevealProof + PolyEquivalenceProof BN254G2Point +} + +// BVMEigenDataLayrChainRollupStore is an auto generated low-level Go binding around an user-defined struct. +type BVMEigenDataLayrChainRollupStore struct { + OriginDataStoreId uint32 + DataStoreId uint32 + ConfirmAt uint32 + Status uint8 +} + +// DataLayrDisclosureLogicMultiRevealProof is an auto generated low-level Go binding around an user-defined struct. +type DataLayrDisclosureLogicMultiRevealProof struct { + InterpolationPoly BN254G1Point + RevealProof BN254G1Point + ZeroPoly BN254G2Point + ZeroPolyProof []byte +} + +// IDataLayrServiceManagerDataStoreMetadata is an auto generated low-level Go binding around an user-defined struct. +type IDataLayrServiceManagerDataStoreMetadata struct { + HeaderHash [32]byte + DurationDataStoreId uint32 + GlobalDataStoreId uint32 + BlockNumber uint32 + Fee *big.Int + Confirmer common.Address + SignatoryRecordHash [32]byte +} + +// IDataLayrServiceManagerDataStoreSearchData is an auto generated low-level Go binding around an user-defined struct. +type IDataLayrServiceManagerDataStoreSearchData struct { + Metadata IDataLayrServiceManagerDataStoreMetadata + Duration uint8 + Timestamp *big.Int + Index uint32 +} + +// BVMEigenDataLayrChainMetaData contains all meta data concerning the BVMEigenDataLayrChain contract. +var BVMEigenDataLayrChainMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"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\":\"uint256\",\"name\":\"rollupBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rollupBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreReverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BLOCK_STALE_MEASURE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRAUD_STRING\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"durationDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"globalDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"confirmer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreSearchData\",\"name\":\"searchData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"startL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"reConfirmedBatchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"numSequencedTransactions\",\"type\":\"uint32\"},{\"internalType\":\"uint40\",\"name\":\"numSubsequentQueueTransactions\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"timestamp\",\"type\":\"uint40\"}],\"name\":\"confirmData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ctcAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dataManageAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"dataStoreIdToL2RollUpBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"dataStoreIdToRollupStoreNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fraudProofPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL2ConfirmedBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dataStoreId\",\"type\":\"uint32\"}],\"name\":\"getL2RollUpBlockByDataStoreId\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"internalType\":\"structBVM_EigenDataLayrChain.BatchRollupBlock\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL2StoredBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupBatchIndex\",\"type\":\"uint256\"}],\"name\":\"getRollupStoreByRollupBatchIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"confirmAt\",\"type\":\"uint32\"},{\"internalType\":\"enumBVM_EigenDataLayrChain.RollupStoreStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structBVM_EigenDataLayrChain.RollupStore\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_dataManageAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ctcAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_block_stale_measure\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fraudProofPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2SubmittedBlockNumber\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ConfirmedBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2StoredBlockNumber\",\"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\":\"bytes[]\",\"name\":\"polys\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"parse\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fraudulentStoreNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"durationDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"globalDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"confirmer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreSearchData\",\"name\":\"searchData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"firstChunkNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes[]\",\"name\":\"polys\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"interpolationPoly\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"revealProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"zeroPoly\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"zeroPolyProof\",\"type\":\"bytes\"}],\"internalType\":\"structDataLayrDisclosureLogic.MultiRevealProof[]\",\"name\":\"multiRevealProofs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"polyEquivalenceProof\",\"type\":\"tuple\"}],\"internalType\":\"structBVM_EigenDataLayrChain.DisclosureProofs\",\"name\":\"disclosureProofs\",\"type\":\"tuple\"}],\"name\":\"proveFraud\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"removeFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupBatchIndex\",\"type\":\"uint256\"}],\"name\":\"resetRollupBatchData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rollupBatchIndexRollupStores\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"confirmAt\",\"type\":\"uint32\"},{\"internalType\":\"enumBVM_EigenDataLayrChain.RollupStoreStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"startL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"totalOperatorsIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"name\":\"storeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"unavailableFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dataManageAddress\",\"type\":\"address\"}],\"name\":\"updateDataLayrManagerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fraudProofPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFraudProofPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2ConfirmedBlockNumber\",\"type\":\"uint256\"}],\"name\":\"updateL2ConfirmedBlockNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2StoredBlockNumber\",\"type\":\"uint256\"}],\"name\":\"updateL2StoredBlockNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"updateSequencerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50614ac9806100206000396000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c8063715018a61161012a578063b537c4c7116100bd578063d7fbc2e21161008c578063f2a8f12411610071578063f2a8f12414610528578063f2fde38b14610531578063f7db97951461054457600080fd5b8063d7fbc2e2146104f5578063f24950291461050857600080fd5b8063b537c4c714610478578063c8fff01b14610498578063c96c0d38146104ab578063cb79a698146104e257600080fd5b80638da5cb5b116100f95780638da5cb5b146103ef57806392f30a451461040d5780639495de401461045c578063990fca661461046f57600080fd5b8063715018a6146103b9578063728cdbca146103c15780637bd85879146103d45780638bea6cae146103e757600080fd5b806335cec11e116101a25780635c1bba38116101715780635c1bba38146103745780635d42ffb7146103945780635e4a30561461039d5780635e8b3f2d146103b057600080fd5b806335cec11e146102b95780633c762984146102fe57806346b2eb9b1461030757806359cb63911461030f57600080fd5b80632e64b4c0116101de5780632e64b4c0146102615780632e72866b14610274578063301b39ab1461029457806332c58f7a146102a657600080fd5b806302d777de14610210578063060ee9a4146102255780630a33202e146102255780631f944c8f14610238575b600080fd5b61022361021e366004613c4a565b610557565b005b610223610233366004613c4a565b610630565b61024b610246366004613c65565b610709565b6040516102589190613d17565b60405180910390f35b61022361026f366004613d68565b610872565b610287610282366004613d68565b610904565b6040516102589190613deb565b609b545b604051908152602001610258565b6102236102b4366004613c4a565b6109bd565b6099546102d99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610258565b610298609e5481565b61024b610a99565b61036461031d366004613d68565b609f6020526000908152604090205463ffffffff80821691640100000000810482169168010000000000000000820416906c01000000000000000000000000900460ff1684565b6040516102589493929190613e29565b6097546102d99073ffffffffffffffffffffffffffffffffffffffff1681565b610298609c5481565b6102236103ab366004613ee3565b610ab5565b610298609a5481565b610223610dd8565b6102236103cf366004613f80565b610dec565b6102236103e2366004614164565b610fe1565b609c54610298565b60335473ffffffffffffffffffffffffffffffffffffffff166102d9565b61043f61041b3660046141ce565b60a06020526000908152604090208054600182015460029092015490919060ff1683565b604080519384526020840192909252151590820152606001610258565b61022361046a366004613d68565b61175a565b610298609b5481565b6102986104863660046141ce565b60a16020526000908152604090205481565b6102236104a6366004613c4a565b6117ec565b6104be6104b93660046141ce565b6118c0565b60408051825181526020808401519082015291810151151590820152606001610258565b6102236104f0366004614200565b61192a565b610223610503366004613d68565b612084565b6098546102d99073ffffffffffffffffffffffffffffffffffffffff1681565b610298609d5481565b61022361053f366004613c4a565b612116565b610223610552366004613d68565b6121b3565b60975473ffffffffffffffffffffffffffffffffffffffff1633146105e95760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520646c60448201527f736d20616464726573730000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b609880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60975473ffffffffffffffffffffffffffffffffffffffff1633146106bd5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e2072656d6f766520667260448201527f6175642070726f6f66206164647265737300000000000000000000000000000060648201526084016105e0565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a26020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6060806000845b848351101561086657600061078b8261072a602082614330565b610735906001614344565b61074090602061435c565b61074a919061437b565b8551610756908961437b565b848c8c8881811061076957610769614392565b905060200281019061077b91906143c1565b61078692915061437b565b6122a3565b9050838989858181106107a0576107a0614392565b90506020028101906107b291906143c1565b84906107be8583614344565b926107cb93929190614426565b6040516020016107dd93929190614450565b6040516020818303038152906040529350835186116107fc5750610866565b88888481811061080e5761080e614392565b905060200281019061082091906143c1565b905061082c8284614344565b1415610848578261083c81614478565b93505060019150610860565b610853816001614344565b61085d9083614344565b91505b50610710565b50909695505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146108ff5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e20736574206c6174657360448201527f74206c3220626c6f636b206e756d62657200000000000000000000000000000060648201526084016105e0565b609c55565b61092c6040805160808101825260008082526020820181905291810182905290606082015290565b6000828152609f60209081526040918290208251608081018452815463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316938101939093529060608301906c01000000000000000000000000900460ff1660028111156109a3576109a3613d81565b60028111156109b4576109b4613d81565b90525092915050565b60975473ffffffffffffffffffffffffffffffffffffffff163314610a4a5760405162461bcd60e51b815260206004820152603a60248201527f4f6e6c79207468652073657175656e6365722063616e2073657420667261756460448201527f2070726f6f66206164647265737320756e617661696c61626c6500000000000060648201526084016105e0565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a26020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b604051806080016040528060608152602001614a346060913981565b60975473ffffffffffffffffffffffffffffffffffffffff163314610b425760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79207468652073657175656e6365722063616e2073746f72652064617460448201527f610000000000000000000000000000000000000000000000000000000000000060648201526084016105e0565b609a54610b5563ffffffff87164361437b565b10610ba25760405162461bcd60e51b815260206004820152601e60248201527f7374616b65732074616b656e2066726f6d20746f6f206c6f6e672061676f000060448201526064016105e0565b609854604080517f72d18e8d000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916372d18e8d916004808301926020929190829003018186803b158015610c0d57600080fd5b505afa158015610c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c459190614493565b9050609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf49ea733308a8a888f8f6040518863ffffffff1660e01b8152600401610cae97969594939291906144f9565b602060405180830381600087803b158015610cc857600080fd5b505af1158015610cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d009190614493565b5060408051606081018252868152602080820187815285151583850190815263ffffffff8616600090815260a08452858120945185559151600185015551600290930180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169315159390931790925560a1905220600019905581610d8657609b8490555b6040805163ffffffff83168152602081018790529081018590527fa99ca06ac3461399088feac88ec48dc5a47d61c3b6839eab20146f2c4ee535849060600160405180910390a1505050505050505050565b610de06122d8565b610dea600061233f565b565b600054610100900460ff1615808015610e0c5750600054600160ff909116105b80610e265750303b158015610e26575060005460ff166001145b610e985760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105e0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610ef657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610efe6123b6565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609880548984169083161790556099805492881692909116919091179055609a849055609d839055609b829055609c8290558015610fd857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b50505050505050565b33600090815260a2602052604090205460ff16151560011461106b5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c792066726175642070726f6f66207768697465206c6973742063616e2060448201527f6368616c6c656e6765206461746100000000000000000000000000000000000060648201526084016105e0565b6000848152609f602090815260408083208151608081018352815463ffffffff8082168352640100000000820481169583019590955268010000000000000000810490941692810192909252909160608301906c01000000000000000000000000900460ff1660028111156110e2576110e2613d81565b60028111156110f3576110f3613d81565b905250905060018160600151600281111561111057611110613d81565b148015611126575042816040015163ffffffff16115b6111985760405162461bcd60e51b815260206004820152602d60248201527f526f6c6c757053746f7265206d75737420626520636f6d6d697474656420616e60448201527f6420756e636f6e6669726d65640000000000000000000000000000000000000060648201526084016105e0565b82516111a39061243b565b6098546020850151604080870151606088015191517fed82c0ee00000000000000000000000000000000000000000000000000000000815260ff9093166004840152602483015263ffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091169063ed82c0ee9060640160206040518083038186803b15801561122f57600080fd5b505afa158015611243573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611267919061455d565b146112b45760405162461bcd60e51b815260206004820152601e60248201527f6d6574616461746120707265696d61676520697320696e636f7272656374000060448201526064016105e0565b806020015163ffffffff1683600001516040015163ffffffff16146113675760405162461bcd60e51b815260206004820152604260248201527f7365616368446174612773206461746173746f7265206964206973206e6f742060448201527f636f6e73697374656e74207769746820676976656e20726f6c6c75702073746f60648201527f7265000000000000000000000000000000000000000000000000000000000000608482015260a4016105e0565b61137182806143c1565b60405161137f929190614576565b604051908190039020835151146113fe5760405162461bcd60e51b815260206004820152603260248201527f646973636c6f737572652070726f6f667320686561646572686173682070726560448201527f696d61676520697320696e636f7272656374000000000000000000000000000060648201526084016105e0565b61143e61140b83806143c1565b61141b60408601602087016141ce565b6114286040870187614586565b6114356060890189614586565b8960800161255b565b61148a5760405162461bcd60e51b815260206004820152601d60248201527f646973636c6f737572652070726f6f66732061726520696e76616c696400000060448201526064016105e0565b600061149e61149984806143c1565b612b53565b905063ffffffff81166114b46040850185614586565b90506114c660408601602087016141ce565b63ffffffff166114d69190614344565b111561154a5760405162461bcd60e51b815260206004820152602e60248201527f43616e206f6e6c792070726f766520646174612066726f6d207468652073797360448201527f74656d61746963206368756e6b7300000000000000000000000000000000000060648201526084016105e0565b600061157c61155c6040860186614586565b88604051806080016040528060608152602001614a346060913951610709565b9050604051806080016040528060608152602001614a3460609139518151146116335760405162461bcd60e51b815260206004820152604260248201527f50617273696e67206572726f722c2070726f76656e20737472696e672069732060448201527f646966666572656e74206c656e677468207468616e206672617564207374726960648201527f6e67000000000000000000000000000000000000000000000000000000000000608482015260a4016105e0565b604051806080016040528060608152602001614a3460609139805190602001208180519060200120146116a85760405162461bcd60e51b815260206004820152601d60248201527f70726f76656e20737472696e6720213d20667261756420737472696e6700000060448201526064016105e0565b6000878152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff166c02000000000000000000000000179055875181015163ffffffff90811680855260a08452828520548a518401519092168552938290206001015482518c8152938401949094529082015260608101919091527fca227c67a02028763083580d42e8bdef4bb49c393068d05983421cd7a4a2a5be90608001610fcf565b60975473ffffffffffffffffffffffffffffffffffffffff1633146117e75760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e20736574206c6174657360448201527f74206c3220626c6f636b206e756d62657200000000000000000000000000000060648201526084016105e0565b609b55565b60975473ffffffffffffffffffffffffffffffffffffffff1633146118795760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520736560448201527f7175656e6365722061646472657373000000000000000000000000000000000060648201526084016105e0565b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6118e6604051806060016040528060008152602001600081526020016000151581525090565b5063ffffffff16600090815260a060209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b60975473ffffffffffffffffffffffffffffffffffffffff1633146119b75760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79207468652073657175656e6365722063616e2073746f72652064617460448201527f610000000000000000000000000000000000000000000000000000000000000060648201526084016105e0565b885160409081015163ffffffff16600090815260a06020522054881480156119fa5750885160409081015163ffffffff16600090815260a0602052206001015487145b8015611a285750885160409081015163ffffffff16600090815260a0602052206002015460ff161515841515145b611ac05760405162461bcd60e51b815260206004820152605560248201527f446174612073746f72652065697468657220776173206e6f7420696e6974696160448201527f6c697a65642062792074686520726f6c6c757020636f6e74726163742c206f7260648201527f20697320616c726561647920636f6e6669726d65640000000000000000000000608482015260a4016105e0565b885160409081015163ffffffff16600090815260a1602052205460001914611b765760405162461bcd60e51b815260206004820152605560248201527f446174612073746f72652065697468657220776173206e6f7420696e6974696160448201527f6c697a65642062792074686520726f6c6c757020636f6e74726163742c206f7260648201527f20697320616c726561647920636f6e6669726d65640000000000000000000000608482015260a4016105e0565b6098546040517f5189951500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690635189951590611bd0908e908e908e906004016145ee565b600060405180830381600087803b158015611bea57600080fd5b505af1158015611bfe573d6000803e3d6000fd5b5050505083611eb657604080516080810182528a5182015163ffffffff90811682528b51830151166020820152609d549091820190611c3d9042614344565b63ffffffff16815260200160019052609e546000908152609f602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115611d5357611d53613d81565b02179055505050609c879055609e54895160409081015163ffffffff16600090815260a1602052908120919091558890611d8d828a61437b565b6099546040517ff4f7911d00000000000000000000000000000000000000000000000000000000815264ffffffffff808616600483015262ffffff8416602483015263ffffffff89166044830152808816606483015280871660848301528c1660a482015291925073ffffffffffffffffffffffffffffffffffffffff169063f4f7911d9060c401600060405180830381600087803b158015611e2f57600080fd5b505af1158015611e43573d6000803e3d6000fd5b5050609e80547fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f672935091506000611e7983614478565b909155508c51604090810151815163ffffffff93841681529216602083015281018c9052606081018b905260800160405180910390a15050612077565b60405180608001604052808763ffffffff1681526020018a600001516040015163ffffffff168152602001609d5442611eef9190614344565b63ffffffff168152602001600190526000868152609f602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c0100000000000000000000000083600281111561200257612002613d81565b021790555050895160409081015163ffffffff908116600090815260a16020908152908390208990558c5183015183518a81529216908201529081018a9052606081018990527fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f672915060800160405180910390a15b5050505050505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146121115760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520667260448201527f6175642070726f6f6620706572696f640000000000000000000000000000000060648201526084016105e0565b609d55565b61211e6122d8565b73ffffffffffffffffffffffffffffffffffffffff81166121a75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105e0565b6121b08161233f565b50565b60975473ffffffffffffffffffffffffffffffffffffffff1633146122405760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520736560448201527f7175656e6365722061646472657373000000000000000000000000000000000060648201526084016105e0565b60005b609e54811015612293576000818152609f6020526040902080547fffffffffffffffffffffffffffffffffffffff000000000000000000000000001690558061228b81614478565b915050612243565b50609e556001609b819055609c55565b60008284106122bf578183106122b957816122ce565b826122ce565b8184106122cc57816122ce565b835b90505b9392505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610dea5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e0565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166124335760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105e0565b610dea612b62565b600080826000015183602001518460400151856060015186608001518760a001518860c0015160405160200161251e979695949392919096875260e095861b7fffffffff00000000000000000000000000000000000000000000000000000000908116602089015294861b851660248801529290941b909216602885015260a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016602c84015260609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166038830152604c820152606c0190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209392505050565b6000808567ffffffffffffffff81111561257757612577613fdf565b6040519080825280602002602001820160405280156125a0578160200160208202803683370190505b509050600061262d8b8b6040805160c08101825260006080820181815260a0830182905282526020820181905291810182905260608101919091525050604080518082018252823581526020838101358183015282516080810184529182528383013560e090811c918301919091526044840135811c92820192909252604890920135901c606082015290565b90508460005b8181101561290c5761270383612649838e6146b8565b8a8a8581811061265b5761265b614392565b905060200281019061266d91906146e0565b8b8b8681811061267f5761267f614392565b905060200281019061269191906146e0565b6040018c8c878181106126a6576126a6614392565b90506020028101906126b891906146e0565b6080018036038101906126cb919061476e565b8d8d888181106126dd576126dd614392565b90506020028101906126ef91906146e0565b6126fe906101008101906143c1565b612be8565b6127755760405162461bcd60e51b815260206004820152602260248201527f52657665616c206661696c65642064756520746f206e6f6e203120706169726960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016105e0565b89898281811061278757612787614392565b905060200281019061279991906143c1565b9050836020015160206127ac91906147cb565b65ffffffffffff16146128275760405162461bcd60e51b815260206004820152603860248201527f506f6c796e6f6d69616c206d757374206861766520612032353620626974206360448201527f6f656666696369656e7420666f722065616368207465726d000000000000000060648201526084016105e0565b89898281811061283957612839614392565b905060200281019061284b91906143c1565b604051612859929190614576565b604051809103902088888381811061287357612873614392565b905060200281019061288591906146e0565b3589898481811061289857612898614392565b90506020028101906128aa91906146e0565b6040516128d193929160209081013591019283526020830191909152604082015260600190565b604051602081830303815290604052805190602001208482815181106128f9576128f9614392565b6020908102919091010152600101612633565b5060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184604051602001612941919061482c565b6040516020818303038152906040528051906020012060001c6129649190614838565b905061296e613b8f565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018560006040516020016129a392919061484c565b6040516020818303038152906040528051906020012060001c6129c69190614838565b80825260208201526000898982816129e0576129e0614392565b90506020028101906129f291906146e0565b612a029036819003810190614865565b90506000612a348d8d6000818110612a1c57612a1c614392565b9050602002810190612a2e91906143c1565b86612df0565b905060015b8a811015612b3157612a8b83612a868e8e85818110612a5a57612a5a614392565b9050602002810190612a6c91906146e0565b612a7c9036819003810190614865565b6020880151612e96565b612f2c565b92506000612abc8f8f84818110612aa457612aa4614392565b9050602002810190612ab691906143c1565b88612df0565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828760016020020151098408602086015186519194507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001910960208601525080612b2981614478565b915050612a39565b50612b3e828a8684612fc8565b97505050505050505098975050505050505050565b604482013560e01c5b92915050565b600054610100900460ff16612bdf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105e0565b610dea3361233f565b825160208082015191518186015180830151905160408051948501959095529383019190915260608201526080810191909152600090612ca59060a00160405160208183030381529060405280519060200120612c4e898b604001518c60600151613157565b63ffffffff16612c698b6020015165ffffffffffff166132c3565b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135c392505050565b612cf15760405162461bcd60e51b815260206004820181905260248201527f496e636f7272656374207a65726f20706f6c79206d65726b6c652070726f6f6660448201526064016105e0565b8751600090612d1190612a86612d0c368b90038b018b614865565b613739565b604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d602083810191909152810191909152909150612de2612dda36899003890189614865565b8784846137f8565b9a9950505050505050505050565b600080836001825b82811015612e8a576000888289612e10826020614344565b92612e1d93929190614426565b612e2691614897565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180848309860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018784099250612e82602083614344565b915050612df8565b50919695505050505050565b6040805180820190915260008082526020820152612eb2613bad565b83518152602080850151908201526040808201849052600090836060846007600019fa905080612f245760405162461bcd60e51b815260206004820152601060248201527f626e3235342d6d756c2d6661696c65640000000000000000000000000000000060448201526064016105e0565b505092915050565b6040805180820190915260008082526020820152612f48613bcb565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa905080612f245760405162461bcd60e51b815260206004820152601060248201527f626e3235342d6164642d6661696c65640000000000000000000000000000000060448201526064016105e0565b60408051808201909152600181526002602082015260009081612ff3612fed83613739565b86612e96565b604080518082019091527f220ac48bb1f91fd93f502a3d0caa077ac70e0af8819b9d8fa26a168a2c558a5781527f08f54b82af08ceaf7cd5f180bac94870f6d8100a9c9afa9dd09a44916538911260208201529091506130538183612f2c565b9150600061306961306385613739565b87612e96565b905060006130778a83612f2c565b604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290915061314885613141368d90038d018d61476e565b84846137f8565b9b9a5050505050505050505050565b60008061316483856146b8565b905060006131778563ffffffff16613a65565b9050600061318586846148b5565b63ffffffff161561319757600161319a565b60005b60ff166131a787856148d8565b6131b191906146b8565b905060006131cd6131c283856148fb565b63ffffffff16613a65565b90508663ffffffff168863ffffffff16101561320f57806131ee828a613a92565b6131fa906101006148fb565b61320491906148d8565b9450505050506122d1565b613219878461491e565b613223908261491e565b63ffffffff168863ffffffff16101561325557806131ee81856132468b8d61491e565b61325091906146b8565b613a92565b60405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420637265617465206e756d626572206f66206672616d6520686960448201527f67686572207468616e20706f737369626c65000000000000000000000000000060648201526084016105e0565b6000806132cf83613ad1565b9050806132fe57507fe82cea94884b1b895ea0742840a3b19249a723810fd1b04d8564d675b0a416f192915050565b806001141561332f57507f4843774a80fc8385b31024f5bd18b42e62de439206ab9468d42d826796d41f6792915050565b806002141561336057507f092d3e5f87f5293e7ab0cc2ca6b0b5e4adb5e0011656544915f7cea34e69e5ab92915050565b806003141561339157507f494b208540ec8624fbbb3f2c64ffccdaf6253f8f4e50c0d93922d88195b0775592915050565b80600414156133c257507ffdb44b84a82893cfa0e37a97f09ffc4298ad5e62be1bea1d03320ae836213d2292915050565b80600514156133f357507f3f50cb08231d2a76853ba9dbb20dad45a1b75c57cdaff6223bfe069752cff3d492915050565b806006141561342457507fbb39eebd8138eefd5802a49d571e65b3e0d4e32277c28fbf5fbca66e7fb0431092915050565b806007141561345557507ff0a39b513e11fa80cbecbf352f69310eddd5cd03148768e0e9542bd600b133ec92915050565b806008141561348657507f038cca2238865414efb752cc004fffec9e6069b709f495249cdf36efbd5952f692915050565b80600914156134b757507f2a26b054ed559dd255d8ac9060ebf6b95b768d87de767f8174ad2f9a4e48dd0192915050565b80600a14156134e857507f1fe180d0bc4ff7c69fefa595b3b5f3c284535a280f6fdcf69b20770d1e20e1fc92915050565b80600b141561351957507f60e34ad57c61cd6fdd8177437c30e4a30334e63d7683989570cf27020efc820192915050565b80600c141561354a57507feda2417e770ddbe88f083acf06b6794dfb76301314a32bd0697440d76f6cd9cc92915050565b80600d141561357b57507f8cbe9b8cf92ce70e3bec8e1e72a0f85569017a7e43c3db50e4a5badb8dea7ce892915050565b60405162461bcd60e51b815260206004820152601660248201527f4c6f67206e6f7420696e2076616c69642072616e67650000000000000000000060448201526064016105e0565b6000602082516135d39190614838565b156136205760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e67746800000000000000000000000060448201526064016105e0565b6000602083516136309190614330565b905061363d816002614a27565b851061368b5760405162461bcd60e51b815260206004820152601560248201527f4c65616620696e64657820697320746f6f20626967000000000000000000000060448201526064016105e0565b60008660205b8551811161372b578581015192506136aa600289614838565b6136df57604080516020810184905290810184905260600160405160208183030381529060405280519060200120915061370c565b60408051602081018590529081018390526060016040516020818303038152906040528051906020012091505b613717600289614330565b9750613724602082614344565b9050613691565b509094149695505050505050565b6040805180820190915260008082526020820152815115801561375e57506020820151155b1561377c575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516137c19190614838565b6137eb907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761437b565b905292915050565b919050565b604080518082018252858152602080820185905282518084019093528583528201839052600091613827613be9565b60005b60028110156139ec57600061384082600661435c565b905084826002811061385457613854614392565b60200201515183613866836000614344565b600c811061387657613876614392565b602002015284826002811061388d5761388d614392565b602002015160200151838260016138a49190614344565b600c81106138b4576138b4614392565b60200201528382600281106138cb576138cb614392565b60200201515151836138de836002614344565b600c81106138ee576138ee614392565b602002015283826002811061390557613905614392565b602002015151600160200201518361391e836003614344565b600c811061392e5761392e614392565b602002015283826002811061394557613945614392565b60200201516020015160006002811061396057613960614392565b602002015183613971836004614344565b600c811061398157613981614392565b602002015283826002811061399857613998614392565b6020020151602001516001600281106139b3576139b3614392565b6020020151836139c4836005614344565b600c81106139d4576139d4614392565b602002015250806139e481614478565b91505061382a565b506139f5613c08565b60006020826101808560086107d05a03fa905080613a555760405162461bcd60e51b815260206004820152601460248201527f626e3235342d70616972696e672d6661696c656400000000000000000000000060448201526064016105e0565b5051151598975050505050505050565b600060015b82816001901b1015613a885780613a8081614478565b915050613a6a565b6001901b92915050565b600080613aa48463ffffffff16613ad1565b613aaf90602061491e565b90508063ffffffff16613ac184613b41565b63ffffffff16901c949350505050565b6000808211613b225760405162461bcd60e51b815260206004820152601360248201527f4c6f67206d75737420626520646566696e65640000000000000000000000000060448201526064016105e0565b60005b600183821c14612b5c5780613b3981614478565b915050613b25565b600080805b6020811015613b88576001811b84811663ffffffff1615613b7557613b6c82601f61437b565b6001901b831792505b5080613b8081614478565b915050613b46565b5092915050565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146137f357600080fd5b600060208284031215613c5c57600080fd5b6122d182613c26565b60008060008060608587031215613c7b57600080fd5b843567ffffffffffffffff80821115613c9357600080fd5b818701915087601f830112613ca757600080fd5b813581811115613cb657600080fd5b8860208260051b8501011115613ccb57600080fd5b6020928301999098509187013596604001359550909350505050565b60005b83811015613d02578181015183820152602001613cea565b83811115613d11576000848401525b50505050565b6020815260008251806020840152613d36816040850160208701613ce7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215613d7a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613de7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600060808201905063ffffffff808451168352806020850151166020840152806040850151166040840152506060830151613b886060840182613db0565b63ffffffff858116825284811660208301528316604082015260808101613e536060830184613db0565b95945050505050565b60008083601f840112613e6e57600080fd5b50813567ffffffffffffffff811115613e8657600080fd5b602083019150836020828501011115613e9e57600080fd5b9250929050565b803560ff811681146137f357600080fd5b63ffffffff811681146121b057600080fd5b80356137f381613eb6565b803580151581146137f357600080fd5b60008060008060008060008060e0898b031215613eff57600080fd5b883567ffffffffffffffff811115613f1657600080fd5b613f228b828c01613e5c565b9099509750613f35905060208a01613ea5565b95506040890135613f4581613eb6565b9450606089013593506080890135925060a0890135613f6381613eb6565b9150613f7160c08a01613ed3565b90509295985092959890939650565b60008060008060008060c08789031215613f9957600080fd5b613fa287613c26565b9550613fb060208801613c26565b9450613fbe60408801613c26565b9350606087013592506080870135915060a087013590509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561403157614031613fdf565b60405290565b60405160e0810167ffffffffffffffff8111828210171561403157614031613fdf565b6040805190810167ffffffffffffffff8111828210171561403157614031613fdf565b600081830361014081121561409157600080fd5b61409961400e565b915060e08112156140a957600080fd5b506140b2614037565b8235815260208301356140c481613eb6565b602082015260408301356140d781613eb6565b604082015260608301356140ea81613eb6565b606082015260808301356bffffffffffffffffffffffff8116811461410e57600080fd5b608082015261411f60a08401613c26565b60a082015260c08381013590820152815261413c60e08301613ea5565b602082015261010082013560408201526141596101208301613ec8565b606082015292915050565b6000806000806101a0858703121561417b57600080fd5b8435935060208501359250614193866040870161407d565b915061018085013567ffffffffffffffff8111156141b057600080fd5b850161010081880312156141c357600080fd5b939692955090935050565b6000602082840312156141e057600080fd5b81356122d181613eb6565b803564ffffffffff811681146137f357600080fd5b60008060008060008060008060008060006102608c8e03121561422257600080fd5b8b3567ffffffffffffffff81111561423957600080fd5b6142458e828f01613e5c565b909c509a5061425990508d60208e0161407d565b98506101608c013597506101808c013596506101a08c013561427a81613eb6565b95506101c08c013594506142916101e08d01613ed3565b93506102008c01356142a281613eb6565b92506142b16102208d016141eb565b91506142c06102408d016141eb565b90509295989b509295989b9093969950565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008261433f5761433f6142d2565b500490565b6000821982111561435757614357614301565b500190565b600081600019048311821515161561437657614376614301565b500290565b60008282101561438d5761438d614301565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126143f657600080fd5b83018035915067ffffffffffffffff82111561441157600080fd5b602001915036819003821315613e9e57600080fd5b6000808585111561443657600080fd5b8386111561444357600080fd5b5050820193919092039150565b60008451614462818460208901613ce7565b8201838582376000930192835250909392505050565b600060001982141561448c5761448c614301565b5060010190565b6000602082840312156144a557600080fd5b81516122d181613eb6565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff88811682528716602082015260ff8616604082015263ffffffff85811660608301528416608082015260c060a0820181905260009061455090830184866144b0565b9998505050505050505050565b60006020828403121561456f57600080fd5b5051919050565b8183823760009101908152919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126145bb57600080fd5b83018035915067ffffffffffffffff8211156145d657600080fd5b6020019150600581901b3603821315613e9e57600080fd5b600061016080835261460381840186886144b0565b915050825180516020840152602081015163ffffffff808216604086015280604084015116606086015280606084015116608086015250506bffffffffffffffffffffffff60808201511660a084015273ffffffffffffffffffffffffffffffffffffffff60a08201511660c084015260c081015160e084015250602083015161469361010084018260ff169052565b50604083015161012083015260609092015163ffffffff166101409091015292915050565b600063ffffffff8083168185168083038211156146d7576146d7614301565b01949350505050565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261471457600080fd5b9190910192915050565b600082601f83011261472f57600080fd5b61473761405a565b80604084018581111561474957600080fd5b845b8181101561476357803584526020938401930161474b565b509095945050505050565b60006080828403121561478057600080fd5b6040516040810181811067ffffffffffffffff821117156147a3576147a3613fdf565b6040526147b0848461471e565b81526147bf846040850161471e565b60208201529392505050565b600065ffffffffffff808316818516818304811182151516156147f0576147f0614301565b02949350505050565b60008151602080840160005b8381101561482157815187529582019590820190600101614805565b509495945050505050565b60006122d182846147f9565b600082614847576148476142d2565b500690565b600061485882856147f9565b9283525050602001919050565b60006040828403121561487757600080fd5b61487f61405a565b82358152602083013560208201528091505092915050565b80356020831015612b5c57600019602084900360031b1b1692915050565b600063ffffffff808416806148cc576148cc6142d2565b92169190910692915050565b600063ffffffff808416806148ef576148ef6142d2565b92169190910492915050565b600063ffffffff808316818516818304811182151516156147f0576147f0614301565b600063ffffffff8381169083168181101561493b5761493b614301565b039392505050565b600181815b8085111561497e57816000190482111561496457614964614301565b8085161561497157918102915b93841c9390800290614948565b509250929050565b60008261499557506001612b5c565b816149a257506000612b5c565b81600181146149b857600281146149c2576149de565b6001915050612b5c565b60ff8411156149d3576149d3614301565b50506001821b612b5c565b5060208310610133831016604e8410600b8410161715614a01575081810a612b5c565b614a0b8383614943565b8060001904821115614a1f57614a1f614301565b029392505050565b60006122d1838361498656fe2d5f2860204f2060295f2d202d5f2860206f2060295f2d202d5f286020512060295f2d2042495444414f204a5553542052454b5420594f55207c5f2860204f2060295f7c202d207c5f2860206f2060295f7c202d207c5f286020512060295f7ca264697066735822122063c985c2e5a4709374c0b044be2a0e051f2572d009e3fbf3624eecf3efc05a7564736f6c63430008090033", +} + +// BVMEigenDataLayrChainABI is the input ABI used to generate the binding from. +// Deprecated: Use BVMEigenDataLayrChainMetaData.ABI instead. +var BVMEigenDataLayrChainABI = BVMEigenDataLayrChainMetaData.ABI + +// BVMEigenDataLayrChainBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use BVMEigenDataLayrChainMetaData.Bin instead. +var BVMEigenDataLayrChainBin = BVMEigenDataLayrChainMetaData.Bin + +// DeployBVMEigenDataLayrChain deploys a new Ethereum contract, binding an instance of BVMEigenDataLayrChain to it. +func DeployBVMEigenDataLayrChain(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *BVMEigenDataLayrChain, error) { + parsed, err := BVMEigenDataLayrChainMetaData.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(BVMEigenDataLayrChainBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &BVMEigenDataLayrChain{BVMEigenDataLayrChainCaller: BVMEigenDataLayrChainCaller{contract: contract}, BVMEigenDataLayrChainTransactor: BVMEigenDataLayrChainTransactor{contract: contract}, BVMEigenDataLayrChainFilterer: BVMEigenDataLayrChainFilterer{contract: contract}}, nil +} + +// BVMEigenDataLayrChain is an auto generated Go binding around an Ethereum contract. +type BVMEigenDataLayrChain struct { + BVMEigenDataLayrChainCaller // Read-only binding to the contract + BVMEigenDataLayrChainTransactor // Write-only binding to the contract + BVMEigenDataLayrChainFilterer // Log filterer for contract events +} + +// BVMEigenDataLayrChainCaller is an auto generated read-only Go binding around an Ethereum contract. +type BVMEigenDataLayrChainCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BVMEigenDataLayrChainTransactor is an auto generated write-only Go binding around an Ethereum contract. +type BVMEigenDataLayrChainTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BVMEigenDataLayrChainFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type BVMEigenDataLayrChainFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BVMEigenDataLayrChainSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type BVMEigenDataLayrChainSession struct { + Contract *BVMEigenDataLayrChain // 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 +} + +// BVMEigenDataLayrChainCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type BVMEigenDataLayrChainCallerSession struct { + Contract *BVMEigenDataLayrChainCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// BVMEigenDataLayrChainTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type BVMEigenDataLayrChainTransactorSession struct { + Contract *BVMEigenDataLayrChainTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BVMEigenDataLayrChainRaw is an auto generated low-level Go binding around an Ethereum contract. +type BVMEigenDataLayrChainRaw struct { + Contract *BVMEigenDataLayrChain // Generic contract binding to access the raw methods on +} + +// BVMEigenDataLayrChainCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type BVMEigenDataLayrChainCallerRaw struct { + Contract *BVMEigenDataLayrChainCaller // Generic read-only contract binding to access the raw methods on +} + +// BVMEigenDataLayrChainTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type BVMEigenDataLayrChainTransactorRaw struct { + Contract *BVMEigenDataLayrChainTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewBVMEigenDataLayrChain creates a new instance of BVMEigenDataLayrChain, bound to a specific deployed contract. +func NewBVMEigenDataLayrChain(address common.Address, backend bind.ContractBackend) (*BVMEigenDataLayrChain, error) { + contract, err := bindBVMEigenDataLayrChain(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BVMEigenDataLayrChain{BVMEigenDataLayrChainCaller: BVMEigenDataLayrChainCaller{contract: contract}, BVMEigenDataLayrChainTransactor: BVMEigenDataLayrChainTransactor{contract: contract}, BVMEigenDataLayrChainFilterer: BVMEigenDataLayrChainFilterer{contract: contract}}, nil +} + +// NewBVMEigenDataLayrChainCaller creates a new read-only instance of BVMEigenDataLayrChain, bound to a specific deployed contract. +func NewBVMEigenDataLayrChainCaller(address common.Address, caller bind.ContractCaller) (*BVMEigenDataLayrChainCaller, error) { + contract, err := bindBVMEigenDataLayrChain(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BVMEigenDataLayrChainCaller{contract: contract}, nil +} + +// NewBVMEigenDataLayrChainTransactor creates a new write-only instance of BVMEigenDataLayrChain, bound to a specific deployed contract. +func NewBVMEigenDataLayrChainTransactor(address common.Address, transactor bind.ContractTransactor) (*BVMEigenDataLayrChainTransactor, error) { + contract, err := bindBVMEigenDataLayrChain(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BVMEigenDataLayrChainTransactor{contract: contract}, nil +} + +// NewBVMEigenDataLayrChainFilterer creates a new log filterer instance of BVMEigenDataLayrChain, bound to a specific deployed contract. +func NewBVMEigenDataLayrChainFilterer(address common.Address, filterer bind.ContractFilterer) (*BVMEigenDataLayrChainFilterer, error) { + contract, err := bindBVMEigenDataLayrChain(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BVMEigenDataLayrChainFilterer{contract: contract}, nil +} + +// bindBVMEigenDataLayrChain binds a generic wrapper to an already deployed contract. +func bindBVMEigenDataLayrChain(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(BVMEigenDataLayrChainABI)) + 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 (_BVMEigenDataLayrChain *BVMEigenDataLayrChainRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BVMEigenDataLayrChain.Contract.BVMEigenDataLayrChainCaller.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 (_BVMEigenDataLayrChain *BVMEigenDataLayrChainRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.BVMEigenDataLayrChainTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.BVMEigenDataLayrChainTransactor.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 (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BVMEigenDataLayrChain.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 (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.contract.Transact(opts, method, params...) +} + +// BLOCKSTALEMEASURE is a free data retrieval call binding the contract method 0x5e8b3f2d. +// +// Solidity: function BLOCK_STALE_MEASURE() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) BLOCKSTALEMEASURE(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "BLOCK_STALE_MEASURE") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BLOCKSTALEMEASURE is a free data retrieval call binding the contract method 0x5e8b3f2d. +// +// Solidity: function BLOCK_STALE_MEASURE() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) BLOCKSTALEMEASURE() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.BLOCKSTALEMEASURE(&_BVMEigenDataLayrChain.CallOpts) +} + +// BLOCKSTALEMEASURE is a free data retrieval call binding the contract method 0x5e8b3f2d. +// +// Solidity: function BLOCK_STALE_MEASURE() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) BLOCKSTALEMEASURE() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.BLOCKSTALEMEASURE(&_BVMEigenDataLayrChain.CallOpts) +} + +// FRAUDSTRING is a free data retrieval call binding the contract method 0x46b2eb9b. +// +// Solidity: function FRAUD_STRING() view returns(bytes) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) FRAUDSTRING(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "FRAUD_STRING") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// FRAUDSTRING is a free data retrieval call binding the contract method 0x46b2eb9b. +// +// Solidity: function FRAUD_STRING() view returns(bytes) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) FRAUDSTRING() ([]byte, error) { + return _BVMEigenDataLayrChain.Contract.FRAUDSTRING(&_BVMEigenDataLayrChain.CallOpts) +} + +// FRAUDSTRING is a free data retrieval call binding the contract method 0x46b2eb9b. +// +// Solidity: function FRAUD_STRING() view returns(bytes) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) FRAUDSTRING() ([]byte, error) { + return _BVMEigenDataLayrChain.Contract.FRAUDSTRING(&_BVMEigenDataLayrChain.CallOpts) +} + +// CtcAddress is a free data retrieval call binding the contract method 0x35cec11e. +// +// Solidity: function ctcAddress() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) CtcAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "ctcAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// CtcAddress is a free data retrieval call binding the contract method 0x35cec11e. +// +// Solidity: function ctcAddress() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) CtcAddress() (common.Address, error) { + return _BVMEigenDataLayrChain.Contract.CtcAddress(&_BVMEigenDataLayrChain.CallOpts) +} + +// CtcAddress is a free data retrieval call binding the contract method 0x35cec11e. +// +// Solidity: function ctcAddress() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) CtcAddress() (common.Address, error) { + return _BVMEigenDataLayrChain.Contract.CtcAddress(&_BVMEigenDataLayrChain.CallOpts) +} + +// DataManageAddress is a free data retrieval call binding the contract method 0xf2495029. +// +// Solidity: function dataManageAddress() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) DataManageAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "dataManageAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DataManageAddress is a free data retrieval call binding the contract method 0xf2495029. +// +// Solidity: function dataManageAddress() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) DataManageAddress() (common.Address, error) { + return _BVMEigenDataLayrChain.Contract.DataManageAddress(&_BVMEigenDataLayrChain.CallOpts) +} + +// DataManageAddress is a free data retrieval call binding the contract method 0xf2495029. +// +// Solidity: function dataManageAddress() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) DataManageAddress() (common.Address, error) { + return _BVMEigenDataLayrChain.Contract.DataManageAddress(&_BVMEigenDataLayrChain.CallOpts) +} + +// DataStoreIdToL2RollUpBlock is a free data retrieval call binding the contract method 0x92f30a45. +// +// Solidity: function dataStoreIdToL2RollUpBlock(uint32 ) view returns(uint256 startL2BlockNumber, uint256 endBL2BlockNumber, bool isReRollup) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) DataStoreIdToL2RollUpBlock(opts *bind.CallOpts, arg0 uint32) (struct { + StartL2BlockNumber *big.Int + EndBL2BlockNumber *big.Int + IsReRollup bool +}, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "dataStoreIdToL2RollUpBlock", arg0) + + outstruct := new(struct { + StartL2BlockNumber *big.Int + EndBL2BlockNumber *big.Int + IsReRollup bool + }) + if err != nil { + return *outstruct, err + } + + outstruct.StartL2BlockNumber = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.EndBL2BlockNumber = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.IsReRollup = *abi.ConvertType(out[2], new(bool)).(*bool) + + return *outstruct, err + +} + +// DataStoreIdToL2RollUpBlock is a free data retrieval call binding the contract method 0x92f30a45. +// +// Solidity: function dataStoreIdToL2RollUpBlock(uint32 ) view returns(uint256 startL2BlockNumber, uint256 endBL2BlockNumber, bool isReRollup) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) DataStoreIdToL2RollUpBlock(arg0 uint32) (struct { + StartL2BlockNumber *big.Int + EndBL2BlockNumber *big.Int + IsReRollup bool +}, error) { + return _BVMEigenDataLayrChain.Contract.DataStoreIdToL2RollUpBlock(&_BVMEigenDataLayrChain.CallOpts, arg0) +} + +// DataStoreIdToL2RollUpBlock is a free data retrieval call binding the contract method 0x92f30a45. +// +// Solidity: function dataStoreIdToL2RollUpBlock(uint32 ) view returns(uint256 startL2BlockNumber, uint256 endBL2BlockNumber, bool isReRollup) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) DataStoreIdToL2RollUpBlock(arg0 uint32) (struct { + StartL2BlockNumber *big.Int + EndBL2BlockNumber *big.Int + IsReRollup bool +}, error) { + return _BVMEigenDataLayrChain.Contract.DataStoreIdToL2RollUpBlock(&_BVMEigenDataLayrChain.CallOpts, arg0) +} + +// DataStoreIdToRollupStoreNumber is a free data retrieval call binding the contract method 0xb537c4c7. +// +// Solidity: function dataStoreIdToRollupStoreNumber(uint32 ) view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) DataStoreIdToRollupStoreNumber(opts *bind.CallOpts, arg0 uint32) (*big.Int, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "dataStoreIdToRollupStoreNumber", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// DataStoreIdToRollupStoreNumber is a free data retrieval call binding the contract method 0xb537c4c7. +// +// Solidity: function dataStoreIdToRollupStoreNumber(uint32 ) view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) DataStoreIdToRollupStoreNumber(arg0 uint32) (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.DataStoreIdToRollupStoreNumber(&_BVMEigenDataLayrChain.CallOpts, arg0) +} + +// DataStoreIdToRollupStoreNumber is a free data retrieval call binding the contract method 0xb537c4c7. +// +// Solidity: function dataStoreIdToRollupStoreNumber(uint32 ) view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) DataStoreIdToRollupStoreNumber(arg0 uint32) (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.DataStoreIdToRollupStoreNumber(&_BVMEigenDataLayrChain.CallOpts, arg0) +} + +// FraudProofPeriod is a free data retrieval call binding the contract method 0xf2a8f124. +// +// Solidity: function fraudProofPeriod() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) FraudProofPeriod(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "fraudProofPeriod") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// FraudProofPeriod is a free data retrieval call binding the contract method 0xf2a8f124. +// +// Solidity: function fraudProofPeriod() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) FraudProofPeriod() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.FraudProofPeriod(&_BVMEigenDataLayrChain.CallOpts) +} + +// FraudProofPeriod is a free data retrieval call binding the contract method 0xf2a8f124. +// +// Solidity: function fraudProofPeriod() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) FraudProofPeriod() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.FraudProofPeriod(&_BVMEigenDataLayrChain.CallOpts) +} + +// GetL2ConfirmedBlockNumber is a free data retrieval call binding the contract method 0x8bea6cae. +// +// Solidity: function getL2ConfirmedBlockNumber() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) GetL2ConfirmedBlockNumber(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "getL2ConfirmedBlockNumber") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetL2ConfirmedBlockNumber is a free data retrieval call binding the contract method 0x8bea6cae. +// +// Solidity: function getL2ConfirmedBlockNumber() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) GetL2ConfirmedBlockNumber() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.GetL2ConfirmedBlockNumber(&_BVMEigenDataLayrChain.CallOpts) +} + +// GetL2ConfirmedBlockNumber is a free data retrieval call binding the contract method 0x8bea6cae. +// +// Solidity: function getL2ConfirmedBlockNumber() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) GetL2ConfirmedBlockNumber() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.GetL2ConfirmedBlockNumber(&_BVMEigenDataLayrChain.CallOpts) +} + +// GetL2RollUpBlockByDataStoreId is a free data retrieval call binding the contract method 0xc96c0d38. +// +// Solidity: function getL2RollUpBlockByDataStoreId(uint32 _dataStoreId) view returns((uint256,uint256,bool)) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) GetL2RollUpBlockByDataStoreId(opts *bind.CallOpts, _dataStoreId uint32) (BVMEigenDataLayrChainBatchRollupBlock, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "getL2RollUpBlockByDataStoreId", _dataStoreId) + + if err != nil { + return *new(BVMEigenDataLayrChainBatchRollupBlock), err + } + + out0 := *abi.ConvertType(out[0], new(BVMEigenDataLayrChainBatchRollupBlock)).(*BVMEigenDataLayrChainBatchRollupBlock) + + return out0, err + +} + +// GetL2RollUpBlockByDataStoreId is a free data retrieval call binding the contract method 0xc96c0d38. +// +// Solidity: function getL2RollUpBlockByDataStoreId(uint32 _dataStoreId) view returns((uint256,uint256,bool)) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) GetL2RollUpBlockByDataStoreId(_dataStoreId uint32) (BVMEigenDataLayrChainBatchRollupBlock, error) { + return _BVMEigenDataLayrChain.Contract.GetL2RollUpBlockByDataStoreId(&_BVMEigenDataLayrChain.CallOpts, _dataStoreId) +} + +// GetL2RollUpBlockByDataStoreId is a free data retrieval call binding the contract method 0xc96c0d38. +// +// Solidity: function getL2RollUpBlockByDataStoreId(uint32 _dataStoreId) view returns((uint256,uint256,bool)) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) GetL2RollUpBlockByDataStoreId(_dataStoreId uint32) (BVMEigenDataLayrChainBatchRollupBlock, error) { + return _BVMEigenDataLayrChain.Contract.GetL2RollUpBlockByDataStoreId(&_BVMEigenDataLayrChain.CallOpts, _dataStoreId) +} + +// GetL2StoredBlockNumber is a free data retrieval call binding the contract method 0x301b39ab. +// +// Solidity: function getL2StoredBlockNumber() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) GetL2StoredBlockNumber(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "getL2StoredBlockNumber") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetL2StoredBlockNumber is a free data retrieval call binding the contract method 0x301b39ab. +// +// Solidity: function getL2StoredBlockNumber() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) GetL2StoredBlockNumber() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.GetL2StoredBlockNumber(&_BVMEigenDataLayrChain.CallOpts) +} + +// GetL2StoredBlockNumber is a free data retrieval call binding the contract method 0x301b39ab. +// +// Solidity: function getL2StoredBlockNumber() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) GetL2StoredBlockNumber() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.GetL2StoredBlockNumber(&_BVMEigenDataLayrChain.CallOpts) +} + +// GetRollupStoreByRollupBatchIndex is a free data retrieval call binding the contract method 0x2e72866b. +// +// Solidity: function getRollupStoreByRollupBatchIndex(uint256 _rollupBatchIndex) view returns((uint32,uint32,uint32,uint8)) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) GetRollupStoreByRollupBatchIndex(opts *bind.CallOpts, _rollupBatchIndex *big.Int) (BVMEigenDataLayrChainRollupStore, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "getRollupStoreByRollupBatchIndex", _rollupBatchIndex) + + if err != nil { + return *new(BVMEigenDataLayrChainRollupStore), err + } + + out0 := *abi.ConvertType(out[0], new(BVMEigenDataLayrChainRollupStore)).(*BVMEigenDataLayrChainRollupStore) + + return out0, err + +} + +// GetRollupStoreByRollupBatchIndex is a free data retrieval call binding the contract method 0x2e72866b. +// +// Solidity: function getRollupStoreByRollupBatchIndex(uint256 _rollupBatchIndex) view returns((uint32,uint32,uint32,uint8)) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) GetRollupStoreByRollupBatchIndex(_rollupBatchIndex *big.Int) (BVMEigenDataLayrChainRollupStore, error) { + return _BVMEigenDataLayrChain.Contract.GetRollupStoreByRollupBatchIndex(&_BVMEigenDataLayrChain.CallOpts, _rollupBatchIndex) +} + +// GetRollupStoreByRollupBatchIndex is a free data retrieval call binding the contract method 0x2e72866b. +// +// Solidity: function getRollupStoreByRollupBatchIndex(uint256 _rollupBatchIndex) view returns((uint32,uint32,uint32,uint8)) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) GetRollupStoreByRollupBatchIndex(_rollupBatchIndex *big.Int) (BVMEigenDataLayrChainRollupStore, error) { + return _BVMEigenDataLayrChain.Contract.GetRollupStoreByRollupBatchIndex(&_BVMEigenDataLayrChain.CallOpts, _rollupBatchIndex) +} + +// L2ConfirmedBlockNumber is a free data retrieval call binding the contract method 0x5d42ffb7. +// +// Solidity: function l2ConfirmedBlockNumber() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) L2ConfirmedBlockNumber(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "l2ConfirmedBlockNumber") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ConfirmedBlockNumber is a free data retrieval call binding the contract method 0x5d42ffb7. +// +// Solidity: function l2ConfirmedBlockNumber() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) L2ConfirmedBlockNumber() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.L2ConfirmedBlockNumber(&_BVMEigenDataLayrChain.CallOpts) +} + +// L2ConfirmedBlockNumber is a free data retrieval call binding the contract method 0x5d42ffb7. +// +// Solidity: function l2ConfirmedBlockNumber() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) L2ConfirmedBlockNumber() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.L2ConfirmedBlockNumber(&_BVMEigenDataLayrChain.CallOpts) +} + +// L2StoredBlockNumber is a free data retrieval call binding the contract method 0x990fca66. +// +// Solidity: function l2StoredBlockNumber() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) L2StoredBlockNumber(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "l2StoredBlockNumber") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2StoredBlockNumber is a free data retrieval call binding the contract method 0x990fca66. +// +// Solidity: function l2StoredBlockNumber() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) L2StoredBlockNumber() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.L2StoredBlockNumber(&_BVMEigenDataLayrChain.CallOpts) +} + +// L2StoredBlockNumber is a free data retrieval call binding the contract method 0x990fca66. +// +// Solidity: function l2StoredBlockNumber() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) L2StoredBlockNumber() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.L2StoredBlockNumber(&_BVMEigenDataLayrChain.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.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 (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) Owner() (common.Address, error) { + return _BVMEigenDataLayrChain.Contract.Owner(&_BVMEigenDataLayrChain.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) Owner() (common.Address, error) { + return _BVMEigenDataLayrChain.Contract.Owner(&_BVMEigenDataLayrChain.CallOpts) +} + +// RollupBatchIndex is a free data retrieval call binding the contract method 0x3c762984. +// +// Solidity: function rollupBatchIndex() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) RollupBatchIndex(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "rollupBatchIndex") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// RollupBatchIndex is a free data retrieval call binding the contract method 0x3c762984. +// +// Solidity: function rollupBatchIndex() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) RollupBatchIndex() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.RollupBatchIndex(&_BVMEigenDataLayrChain.CallOpts) +} + +// RollupBatchIndex is a free data retrieval call binding the contract method 0x3c762984. +// +// Solidity: function rollupBatchIndex() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) RollupBatchIndex() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.RollupBatchIndex(&_BVMEigenDataLayrChain.CallOpts) +} + +// RollupBatchIndexRollupStores is a free data retrieval call binding the contract method 0x59cb6391. +// +// Solidity: function rollupBatchIndexRollupStores(uint256 ) view returns(uint32 originDataStoreId, uint32 dataStoreId, uint32 confirmAt, uint8 status) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) RollupBatchIndexRollupStores(opts *bind.CallOpts, arg0 *big.Int) (struct { + OriginDataStoreId uint32 + DataStoreId uint32 + ConfirmAt uint32 + Status uint8 +}, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "rollupBatchIndexRollupStores", arg0) + + outstruct := new(struct { + OriginDataStoreId uint32 + DataStoreId uint32 + ConfirmAt uint32 + Status uint8 + }) + if err != nil { + return *outstruct, err + } + + outstruct.OriginDataStoreId = *abi.ConvertType(out[0], new(uint32)).(*uint32) + outstruct.DataStoreId = *abi.ConvertType(out[1], new(uint32)).(*uint32) + outstruct.ConfirmAt = *abi.ConvertType(out[2], new(uint32)).(*uint32) + outstruct.Status = *abi.ConvertType(out[3], new(uint8)).(*uint8) + + return *outstruct, err + +} + +// RollupBatchIndexRollupStores is a free data retrieval call binding the contract method 0x59cb6391. +// +// Solidity: function rollupBatchIndexRollupStores(uint256 ) view returns(uint32 originDataStoreId, uint32 dataStoreId, uint32 confirmAt, uint8 status) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) RollupBatchIndexRollupStores(arg0 *big.Int) (struct { + OriginDataStoreId uint32 + DataStoreId uint32 + ConfirmAt uint32 + Status uint8 +}, error) { + return _BVMEigenDataLayrChain.Contract.RollupBatchIndexRollupStores(&_BVMEigenDataLayrChain.CallOpts, arg0) +} + +// RollupBatchIndexRollupStores is a free data retrieval call binding the contract method 0x59cb6391. +// +// Solidity: function rollupBatchIndexRollupStores(uint256 ) view returns(uint32 originDataStoreId, uint32 dataStoreId, uint32 confirmAt, uint8 status) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) RollupBatchIndexRollupStores(arg0 *big.Int) (struct { + OriginDataStoreId uint32 + DataStoreId uint32 + ConfirmAt uint32 + Status uint8 +}, error) { + return _BVMEigenDataLayrChain.Contract.RollupBatchIndexRollupStores(&_BVMEigenDataLayrChain.CallOpts, arg0) +} + +// Sequencer is a free data retrieval call binding the contract method 0x5c1bba38. +// +// Solidity: function sequencer() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) Sequencer(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "sequencer") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Sequencer is a free data retrieval call binding the contract method 0x5c1bba38. +// +// Solidity: function sequencer() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) Sequencer() (common.Address, error) { + return _BVMEigenDataLayrChain.Contract.Sequencer(&_BVMEigenDataLayrChain.CallOpts) +} + +// Sequencer is a free data retrieval call binding the contract method 0x5c1bba38. +// +// Solidity: function sequencer() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) Sequencer() (common.Address, error) { + return _BVMEigenDataLayrChain.Contract.Sequencer(&_BVMEigenDataLayrChain.CallOpts) +} + +// ConfirmData is a paid mutator transaction binding the contract method 0xcb79a698. +// +// Solidity: function confirmData(bytes data, ((bytes32,uint32,uint32,uint32,uint96,address,bytes32),uint8,uint256,uint32) searchData, uint256 startL2Block, uint256 endL2Block, uint32 originDataStoreId, uint256 reConfirmedBatchIndex, bool isReRollup, uint32 numSequencedTransactions, uint40 numSubsequentQueueTransactions, uint40 timestamp) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) ConfirmData(opts *bind.TransactOpts, data []byte, searchData IDataLayrServiceManagerDataStoreSearchData, startL2Block *big.Int, endL2Block *big.Int, originDataStoreId uint32, reConfirmedBatchIndex *big.Int, isReRollup bool, numSequencedTransactions uint32, numSubsequentQueueTransactions *big.Int, timestamp *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "confirmData", data, searchData, startL2Block, endL2Block, originDataStoreId, reConfirmedBatchIndex, isReRollup, numSequencedTransactions, numSubsequentQueueTransactions, timestamp) +} + +// ConfirmData is a paid mutator transaction binding the contract method 0xcb79a698. +// +// Solidity: function confirmData(bytes data, ((bytes32,uint32,uint32,uint32,uint96,address,bytes32),uint8,uint256,uint32) searchData, uint256 startL2Block, uint256 endL2Block, uint32 originDataStoreId, uint256 reConfirmedBatchIndex, bool isReRollup, uint32 numSequencedTransactions, uint40 numSubsequentQueueTransactions, uint40 timestamp) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) ConfirmData(data []byte, searchData IDataLayrServiceManagerDataStoreSearchData, startL2Block *big.Int, endL2Block *big.Int, originDataStoreId uint32, reConfirmedBatchIndex *big.Int, isReRollup bool, numSequencedTransactions uint32, numSubsequentQueueTransactions *big.Int, timestamp *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.ConfirmData(&_BVMEigenDataLayrChain.TransactOpts, data, searchData, startL2Block, endL2Block, originDataStoreId, reConfirmedBatchIndex, isReRollup, numSequencedTransactions, numSubsequentQueueTransactions, timestamp) +} + +// ConfirmData is a paid mutator transaction binding the contract method 0xcb79a698. +// +// Solidity: function confirmData(bytes data, ((bytes32,uint32,uint32,uint32,uint96,address,bytes32),uint8,uint256,uint32) searchData, uint256 startL2Block, uint256 endL2Block, uint32 originDataStoreId, uint256 reConfirmedBatchIndex, bool isReRollup, uint32 numSequencedTransactions, uint40 numSubsequentQueueTransactions, uint40 timestamp) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) ConfirmData(data []byte, searchData IDataLayrServiceManagerDataStoreSearchData, startL2Block *big.Int, endL2Block *big.Int, originDataStoreId uint32, reConfirmedBatchIndex *big.Int, isReRollup bool, numSequencedTransactions uint32, numSubsequentQueueTransactions *big.Int, timestamp *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.ConfirmData(&_BVMEigenDataLayrChain.TransactOpts, data, searchData, startL2Block, endL2Block, originDataStoreId, reConfirmedBatchIndex, isReRollup, numSequencedTransactions, numSubsequentQueueTransactions, timestamp) +} + +// Initialize is a paid mutator transaction binding the contract method 0x728cdbca. +// +// Solidity: function initialize(address _sequencer, address _dataManageAddress, address _ctcAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) Initialize(opts *bind.TransactOpts, _sequencer common.Address, _dataManageAddress common.Address, _ctcAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "initialize", _sequencer, _dataManageAddress, _ctcAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) +} + +// Initialize is a paid mutator transaction binding the contract method 0x728cdbca. +// +// Solidity: function initialize(address _sequencer, address _dataManageAddress, address _ctcAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) Initialize(_sequencer common.Address, _dataManageAddress common.Address, _ctcAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.Initialize(&_BVMEigenDataLayrChain.TransactOpts, _sequencer, _dataManageAddress, _ctcAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) +} + +// Initialize is a paid mutator transaction binding the contract method 0x728cdbca. +// +// Solidity: function initialize(address _sequencer, address _dataManageAddress, address _ctcAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) Initialize(_sequencer common.Address, _dataManageAddress common.Address, _ctcAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.Initialize(&_BVMEigenDataLayrChain.TransactOpts, _sequencer, _dataManageAddress, _ctcAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) +} + +// Parse is a paid mutator transaction binding the contract method 0x1f944c8f. +// +// Solidity: function parse(bytes[] polys, uint256 startIndex, uint256 length) returns(bytes) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) Parse(opts *bind.TransactOpts, polys [][]byte, startIndex *big.Int, length *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "parse", polys, startIndex, length) +} + +// Parse is a paid mutator transaction binding the contract method 0x1f944c8f. +// +// Solidity: function parse(bytes[] polys, uint256 startIndex, uint256 length) returns(bytes) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) Parse(polys [][]byte, startIndex *big.Int, length *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.Parse(&_BVMEigenDataLayrChain.TransactOpts, polys, startIndex, length) +} + +// Parse is a paid mutator transaction binding the contract method 0x1f944c8f. +// +// Solidity: function parse(bytes[] polys, uint256 startIndex, uint256 length) returns(bytes) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) Parse(polys [][]byte, startIndex *big.Int, length *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.Parse(&_BVMEigenDataLayrChain.TransactOpts, polys, startIndex, length) +} + +// ProveFraud is a paid mutator transaction binding the contract method 0x7bd85879. +// +// Solidity: function proveFraud(uint256 fraudulentStoreNumber, uint256 startIndex, ((bytes32,uint32,uint32,uint32,uint96,address,bytes32),uint8,uint256,uint32) searchData, (bytes,uint32,bytes[],((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2]),bytes)[],(uint256[2],uint256[2])) disclosureProofs) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) ProveFraud(opts *bind.TransactOpts, fraudulentStoreNumber *big.Int, startIndex *big.Int, searchData IDataLayrServiceManagerDataStoreSearchData, disclosureProofs BVMEigenDataLayrChainDisclosureProofs) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "proveFraud", fraudulentStoreNumber, startIndex, searchData, disclosureProofs) +} + +// ProveFraud is a paid mutator transaction binding the contract method 0x7bd85879. +// +// Solidity: function proveFraud(uint256 fraudulentStoreNumber, uint256 startIndex, ((bytes32,uint32,uint32,uint32,uint96,address,bytes32),uint8,uint256,uint32) searchData, (bytes,uint32,bytes[],((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2]),bytes)[],(uint256[2],uint256[2])) disclosureProofs) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) ProveFraud(fraudulentStoreNumber *big.Int, startIndex *big.Int, searchData IDataLayrServiceManagerDataStoreSearchData, disclosureProofs BVMEigenDataLayrChainDisclosureProofs) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.ProveFraud(&_BVMEigenDataLayrChain.TransactOpts, fraudulentStoreNumber, startIndex, searchData, disclosureProofs) +} + +// ProveFraud is a paid mutator transaction binding the contract method 0x7bd85879. +// +// Solidity: function proveFraud(uint256 fraudulentStoreNumber, uint256 startIndex, ((bytes32,uint32,uint32,uint32,uint96,address,bytes32),uint8,uint256,uint32) searchData, (bytes,uint32,bytes[],((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2]),bytes)[],(uint256[2],uint256[2])) disclosureProofs) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) ProveFraud(fraudulentStoreNumber *big.Int, startIndex *big.Int, searchData IDataLayrServiceManagerDataStoreSearchData, disclosureProofs BVMEigenDataLayrChainDisclosureProofs) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.ProveFraud(&_BVMEigenDataLayrChain.TransactOpts, fraudulentStoreNumber, startIndex, searchData, disclosureProofs) +} + +// RemoveFraudProofAddress is a paid mutator transaction binding the contract method 0x060ee9a4. +// +// Solidity: function removeFraudProofAddress(address _address) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) RemoveFraudProofAddress(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "removeFraudProofAddress", _address) +} + +// RemoveFraudProofAddress is a paid mutator transaction binding the contract method 0x060ee9a4. +// +// Solidity: function removeFraudProofAddress(address _address) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) RemoveFraudProofAddress(_address common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.RemoveFraudProofAddress(&_BVMEigenDataLayrChain.TransactOpts, _address) +} + +// RemoveFraudProofAddress is a paid mutator transaction binding the contract method 0x060ee9a4. +// +// Solidity: function removeFraudProofAddress(address _address) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) RemoveFraudProofAddress(_address common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.RemoveFraudProofAddress(&_BVMEigenDataLayrChain.TransactOpts, _address) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) RenounceOwnership() (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.RenounceOwnership(&_BVMEigenDataLayrChain.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.RenounceOwnership(&_BVMEigenDataLayrChain.TransactOpts) +} + +// ResetRollupBatchData is a paid mutator transaction binding the contract method 0xf7db9795. +// +// Solidity: function resetRollupBatchData(uint256 _rollupBatchIndex) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) ResetRollupBatchData(opts *bind.TransactOpts, _rollupBatchIndex *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "resetRollupBatchData", _rollupBatchIndex) +} + +// ResetRollupBatchData is a paid mutator transaction binding the contract method 0xf7db9795. +// +// Solidity: function resetRollupBatchData(uint256 _rollupBatchIndex) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) ResetRollupBatchData(_rollupBatchIndex *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.ResetRollupBatchData(&_BVMEigenDataLayrChain.TransactOpts, _rollupBatchIndex) +} + +// ResetRollupBatchData is a paid mutator transaction binding the contract method 0xf7db9795. +// +// Solidity: function resetRollupBatchData(uint256 _rollupBatchIndex) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) ResetRollupBatchData(_rollupBatchIndex *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.ResetRollupBatchData(&_BVMEigenDataLayrChain.TransactOpts, _rollupBatchIndex) +} + +// SetFraudProofAddress is a paid mutator transaction binding the contract method 0x32c58f7a. +// +// Solidity: function setFraudProofAddress(address _address) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) SetFraudProofAddress(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "setFraudProofAddress", _address) +} + +// SetFraudProofAddress is a paid mutator transaction binding the contract method 0x32c58f7a. +// +// Solidity: function setFraudProofAddress(address _address) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) SetFraudProofAddress(_address common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.SetFraudProofAddress(&_BVMEigenDataLayrChain.TransactOpts, _address) +} + +// SetFraudProofAddress is a paid mutator transaction binding the contract method 0x32c58f7a. +// +// Solidity: function setFraudProofAddress(address _address) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) SetFraudProofAddress(_address common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.SetFraudProofAddress(&_BVMEigenDataLayrChain.TransactOpts, _address) +} + +// StoreData is a paid mutator transaction binding the contract method 0x5e4a3056. +// +// Solidity: function storeData(bytes header, uint8 duration, uint32 blockNumber, uint256 startL2Block, uint256 endL2Block, uint32 totalOperatorsIndex, bool isReRollup) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) StoreData(opts *bind.TransactOpts, header []byte, duration uint8, blockNumber uint32, startL2Block *big.Int, endL2Block *big.Int, totalOperatorsIndex uint32, isReRollup bool) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "storeData", header, duration, blockNumber, startL2Block, endL2Block, totalOperatorsIndex, isReRollup) +} + +// StoreData is a paid mutator transaction binding the contract method 0x5e4a3056. +// +// Solidity: function storeData(bytes header, uint8 duration, uint32 blockNumber, uint256 startL2Block, uint256 endL2Block, uint32 totalOperatorsIndex, bool isReRollup) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) StoreData(header []byte, duration uint8, blockNumber uint32, startL2Block *big.Int, endL2Block *big.Int, totalOperatorsIndex uint32, isReRollup bool) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.StoreData(&_BVMEigenDataLayrChain.TransactOpts, header, duration, blockNumber, startL2Block, endL2Block, totalOperatorsIndex, isReRollup) +} + +// StoreData is a paid mutator transaction binding the contract method 0x5e4a3056. +// +// Solidity: function storeData(bytes header, uint8 duration, uint32 blockNumber, uint256 startL2Block, uint256 endL2Block, uint32 totalOperatorsIndex, bool isReRollup) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) StoreData(header []byte, duration uint8, blockNumber uint32, startL2Block *big.Int, endL2Block *big.Int, totalOperatorsIndex uint32, isReRollup bool) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.StoreData(&_BVMEigenDataLayrChain.TransactOpts, header, duration, blockNumber, startL2Block, endL2Block, totalOperatorsIndex, isReRollup) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.TransferOwnership(&_BVMEigenDataLayrChain.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.TransferOwnership(&_BVMEigenDataLayrChain.TransactOpts, newOwner) +} + +// UnavailableFraudProofAddress is a paid mutator transaction binding the contract method 0x0a33202e. +// +// Solidity: function unavailableFraudProofAddress(address _address) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) UnavailableFraudProofAddress(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "unavailableFraudProofAddress", _address) +} + +// UnavailableFraudProofAddress is a paid mutator transaction binding the contract method 0x0a33202e. +// +// Solidity: function unavailableFraudProofAddress(address _address) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) UnavailableFraudProofAddress(_address common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UnavailableFraudProofAddress(&_BVMEigenDataLayrChain.TransactOpts, _address) +} + +// UnavailableFraudProofAddress is a paid mutator transaction binding the contract method 0x0a33202e. +// +// Solidity: function unavailableFraudProofAddress(address _address) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) UnavailableFraudProofAddress(_address common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UnavailableFraudProofAddress(&_BVMEigenDataLayrChain.TransactOpts, _address) +} + +// UpdateDataLayrManagerAddress is a paid mutator transaction binding the contract method 0x02d777de. +// +// Solidity: function updateDataLayrManagerAddress(address _dataManageAddress) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) UpdateDataLayrManagerAddress(opts *bind.TransactOpts, _dataManageAddress common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "updateDataLayrManagerAddress", _dataManageAddress) +} + +// UpdateDataLayrManagerAddress is a paid mutator transaction binding the contract method 0x02d777de. +// +// Solidity: function updateDataLayrManagerAddress(address _dataManageAddress) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) UpdateDataLayrManagerAddress(_dataManageAddress common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateDataLayrManagerAddress(&_BVMEigenDataLayrChain.TransactOpts, _dataManageAddress) +} + +// UpdateDataLayrManagerAddress is a paid mutator transaction binding the contract method 0x02d777de. +// +// Solidity: function updateDataLayrManagerAddress(address _dataManageAddress) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) UpdateDataLayrManagerAddress(_dataManageAddress common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateDataLayrManagerAddress(&_BVMEigenDataLayrChain.TransactOpts, _dataManageAddress) +} + +// UpdateFraudProofPeriod is a paid mutator transaction binding the contract method 0xd7fbc2e2. +// +// Solidity: function updateFraudProofPeriod(uint256 _fraudProofPeriod) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) UpdateFraudProofPeriod(opts *bind.TransactOpts, _fraudProofPeriod *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "updateFraudProofPeriod", _fraudProofPeriod) +} + +// UpdateFraudProofPeriod is a paid mutator transaction binding the contract method 0xd7fbc2e2. +// +// Solidity: function updateFraudProofPeriod(uint256 _fraudProofPeriod) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) UpdateFraudProofPeriod(_fraudProofPeriod *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateFraudProofPeriod(&_BVMEigenDataLayrChain.TransactOpts, _fraudProofPeriod) +} + +// UpdateFraudProofPeriod is a paid mutator transaction binding the contract method 0xd7fbc2e2. +// +// Solidity: function updateFraudProofPeriod(uint256 _fraudProofPeriod) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) UpdateFraudProofPeriod(_fraudProofPeriod *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateFraudProofPeriod(&_BVMEigenDataLayrChain.TransactOpts, _fraudProofPeriod) +} + +// UpdateL2ConfirmedBlockNumber is a paid mutator transaction binding the contract method 0x2e64b4c0. +// +// Solidity: function updateL2ConfirmedBlockNumber(uint256 _l2ConfirmedBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) UpdateL2ConfirmedBlockNumber(opts *bind.TransactOpts, _l2ConfirmedBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "updateL2ConfirmedBlockNumber", _l2ConfirmedBlockNumber) +} + +// UpdateL2ConfirmedBlockNumber is a paid mutator transaction binding the contract method 0x2e64b4c0. +// +// Solidity: function updateL2ConfirmedBlockNumber(uint256 _l2ConfirmedBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) UpdateL2ConfirmedBlockNumber(_l2ConfirmedBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateL2ConfirmedBlockNumber(&_BVMEigenDataLayrChain.TransactOpts, _l2ConfirmedBlockNumber) +} + +// UpdateL2ConfirmedBlockNumber is a paid mutator transaction binding the contract method 0x2e64b4c0. +// +// Solidity: function updateL2ConfirmedBlockNumber(uint256 _l2ConfirmedBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) UpdateL2ConfirmedBlockNumber(_l2ConfirmedBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateL2ConfirmedBlockNumber(&_BVMEigenDataLayrChain.TransactOpts, _l2ConfirmedBlockNumber) +} + +// UpdateL2StoredBlockNumber is a paid mutator transaction binding the contract method 0x9495de40. +// +// Solidity: function updateL2StoredBlockNumber(uint256 _l2StoredBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) UpdateL2StoredBlockNumber(opts *bind.TransactOpts, _l2StoredBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "updateL2StoredBlockNumber", _l2StoredBlockNumber) +} + +// UpdateL2StoredBlockNumber is a paid mutator transaction binding the contract method 0x9495de40. +// +// Solidity: function updateL2StoredBlockNumber(uint256 _l2StoredBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) UpdateL2StoredBlockNumber(_l2StoredBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateL2StoredBlockNumber(&_BVMEigenDataLayrChain.TransactOpts, _l2StoredBlockNumber) +} + +// UpdateL2StoredBlockNumber is a paid mutator transaction binding the contract method 0x9495de40. +// +// Solidity: function updateL2StoredBlockNumber(uint256 _l2StoredBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) UpdateL2StoredBlockNumber(_l2StoredBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateL2StoredBlockNumber(&_BVMEigenDataLayrChain.TransactOpts, _l2StoredBlockNumber) +} + +// UpdateSequencerAddress is a paid mutator transaction binding the contract method 0xc8fff01b. +// +// Solidity: function updateSequencerAddress(address _sequencer) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) UpdateSequencerAddress(opts *bind.TransactOpts, _sequencer common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "updateSequencerAddress", _sequencer) +} + +// UpdateSequencerAddress is a paid mutator transaction binding the contract method 0xc8fff01b. +// +// Solidity: function updateSequencerAddress(address _sequencer) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) UpdateSequencerAddress(_sequencer common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateSequencerAddress(&_BVMEigenDataLayrChain.TransactOpts, _sequencer) +} + +// UpdateSequencerAddress is a paid mutator transaction binding the contract method 0xc8fff01b. +// +// Solidity: function updateSequencerAddress(address _sequencer) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) UpdateSequencerAddress(_sequencer common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateSequencerAddress(&_BVMEigenDataLayrChain.TransactOpts, _sequencer) +} + +// BVMEigenDataLayrChainInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainInitializedIterator struct { + Event *BVMEigenDataLayrChainInitialized // 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 *BVMEigenDataLayrChainInitializedIterator) 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(BVMEigenDataLayrChainInitialized) + 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(BVMEigenDataLayrChainInitialized) + 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 *BVMEigenDataLayrChainInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BVMEigenDataLayrChainInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BVMEigenDataLayrChainInitialized represents a Initialized event raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) FilterInitialized(opts *bind.FilterOpts) (*BVMEigenDataLayrChainInitializedIterator, error) { + + logs, sub, err := _BVMEigenDataLayrChain.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &BVMEigenDataLayrChainInitializedIterator{contract: _BVMEigenDataLayrChain.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *BVMEigenDataLayrChainInitialized) (event.Subscription, error) { + + logs, sub, err := _BVMEigenDataLayrChain.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(BVMEigenDataLayrChainInitialized) + if err := _BVMEigenDataLayrChain.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 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) ParseInitialized(log types.Log) (*BVMEigenDataLayrChainInitialized, error) { + event := new(BVMEigenDataLayrChainInitialized) + if err := _BVMEigenDataLayrChain.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BVMEigenDataLayrChainOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainOwnershipTransferredIterator struct { + Event *BVMEigenDataLayrChainOwnershipTransferred // 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 *BVMEigenDataLayrChainOwnershipTransferredIterator) 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(BVMEigenDataLayrChainOwnershipTransferred) + 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(BVMEigenDataLayrChainOwnershipTransferred) + 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 *BVMEigenDataLayrChainOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BVMEigenDataLayrChainOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BVMEigenDataLayrChainOwnershipTransferred represents a OwnershipTransferred event raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainOwnershipTransferred 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 (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*BVMEigenDataLayrChainOwnershipTransferredIterator, 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 := _BVMEigenDataLayrChain.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &BVMEigenDataLayrChainOwnershipTransferredIterator{contract: _BVMEigenDataLayrChain.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 (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BVMEigenDataLayrChainOwnershipTransferred, 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 := _BVMEigenDataLayrChain.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(BVMEigenDataLayrChainOwnershipTransferred) + if err := _BVMEigenDataLayrChain.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 (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) ParseOwnershipTransferred(log types.Log) (*BVMEigenDataLayrChainOwnershipTransferred, error) { + event := new(BVMEigenDataLayrChainOwnershipTransferred) + if err := _BVMEigenDataLayrChain.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BVMEigenDataLayrChainRollupStoreConfirmedIterator is returned from FilterRollupStoreConfirmed and is used to iterate over the raw logs and unpacked data for RollupStoreConfirmed events raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainRollupStoreConfirmedIterator struct { + Event *BVMEigenDataLayrChainRollupStoreConfirmed // 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 *BVMEigenDataLayrChainRollupStoreConfirmedIterator) 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(BVMEigenDataLayrChainRollupStoreConfirmed) + 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(BVMEigenDataLayrChainRollupStoreConfirmed) + 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 *BVMEigenDataLayrChainRollupStoreConfirmedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BVMEigenDataLayrChainRollupStoreConfirmedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BVMEigenDataLayrChainRollupStoreConfirmed represents a RollupStoreConfirmed event raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainRollupStoreConfirmed struct { + RollupBatchIndex *big.Int + DataStoreId uint32 + StratL2BlockNumber *big.Int + EndL2BlockNumber *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRollupStoreConfirmed is a free log retrieval operation binding the contract event 0xc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f672. +// +// Solidity: event RollupStoreConfirmed(uint256 rollupBatchIndex, uint32 dataStoreId, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) FilterRollupStoreConfirmed(opts *bind.FilterOpts) (*BVMEigenDataLayrChainRollupStoreConfirmedIterator, error) { + + logs, sub, err := _BVMEigenDataLayrChain.contract.FilterLogs(opts, "RollupStoreConfirmed") + if err != nil { + return nil, err + } + return &BVMEigenDataLayrChainRollupStoreConfirmedIterator{contract: _BVMEigenDataLayrChain.contract, event: "RollupStoreConfirmed", logs: logs, sub: sub}, nil +} + +// WatchRollupStoreConfirmed is a free log subscription operation binding the contract event 0xc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f672. +// +// Solidity: event RollupStoreConfirmed(uint256 rollupBatchIndex, uint32 dataStoreId, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) WatchRollupStoreConfirmed(opts *bind.WatchOpts, sink chan<- *BVMEigenDataLayrChainRollupStoreConfirmed) (event.Subscription, error) { + + logs, sub, err := _BVMEigenDataLayrChain.contract.WatchLogs(opts, "RollupStoreConfirmed") + 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(BVMEigenDataLayrChainRollupStoreConfirmed) + if err := _BVMEigenDataLayrChain.contract.UnpackLog(event, "RollupStoreConfirmed", 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 +} + +// ParseRollupStoreConfirmed is a log parse operation binding the contract event 0xc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f672. +// +// Solidity: event RollupStoreConfirmed(uint256 rollupBatchIndex, uint32 dataStoreId, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) ParseRollupStoreConfirmed(log types.Log) (*BVMEigenDataLayrChainRollupStoreConfirmed, error) { + event := new(BVMEigenDataLayrChainRollupStoreConfirmed) + if err := _BVMEigenDataLayrChain.contract.UnpackLog(event, "RollupStoreConfirmed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BVMEigenDataLayrChainRollupStoreInitializedIterator is returned from FilterRollupStoreInitialized and is used to iterate over the raw logs and unpacked data for RollupStoreInitialized events raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainRollupStoreInitializedIterator struct { + Event *BVMEigenDataLayrChainRollupStoreInitialized // 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 *BVMEigenDataLayrChainRollupStoreInitializedIterator) 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(BVMEigenDataLayrChainRollupStoreInitialized) + 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(BVMEigenDataLayrChainRollupStoreInitialized) + 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 *BVMEigenDataLayrChainRollupStoreInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BVMEigenDataLayrChainRollupStoreInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BVMEigenDataLayrChainRollupStoreInitialized represents a RollupStoreInitialized event raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainRollupStoreInitialized struct { + DataStoreId uint32 + StratL2BlockNumber *big.Int + EndL2BlockNumber *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRollupStoreInitialized is a free log retrieval operation binding the contract event 0xa99ca06ac3461399088feac88ec48dc5a47d61c3b6839eab20146f2c4ee53584. +// +// Solidity: event RollupStoreInitialized(uint32 dataStoreId, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) FilterRollupStoreInitialized(opts *bind.FilterOpts) (*BVMEigenDataLayrChainRollupStoreInitializedIterator, error) { + + logs, sub, err := _BVMEigenDataLayrChain.contract.FilterLogs(opts, "RollupStoreInitialized") + if err != nil { + return nil, err + } + return &BVMEigenDataLayrChainRollupStoreInitializedIterator{contract: _BVMEigenDataLayrChain.contract, event: "RollupStoreInitialized", logs: logs, sub: sub}, nil +} + +// WatchRollupStoreInitialized is a free log subscription operation binding the contract event 0xa99ca06ac3461399088feac88ec48dc5a47d61c3b6839eab20146f2c4ee53584. +// +// Solidity: event RollupStoreInitialized(uint32 dataStoreId, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) WatchRollupStoreInitialized(opts *bind.WatchOpts, sink chan<- *BVMEigenDataLayrChainRollupStoreInitialized) (event.Subscription, error) { + + logs, sub, err := _BVMEigenDataLayrChain.contract.WatchLogs(opts, "RollupStoreInitialized") + 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(BVMEigenDataLayrChainRollupStoreInitialized) + if err := _BVMEigenDataLayrChain.contract.UnpackLog(event, "RollupStoreInitialized", 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 +} + +// ParseRollupStoreInitialized is a log parse operation binding the contract event 0xa99ca06ac3461399088feac88ec48dc5a47d61c3b6839eab20146f2c4ee53584. +// +// Solidity: event RollupStoreInitialized(uint32 dataStoreId, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) ParseRollupStoreInitialized(log types.Log) (*BVMEigenDataLayrChainRollupStoreInitialized, error) { + event := new(BVMEigenDataLayrChainRollupStoreInitialized) + if err := _BVMEigenDataLayrChain.contract.UnpackLog(event, "RollupStoreInitialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BVMEigenDataLayrChainRollupStoreRevertedIterator is returned from FilterRollupStoreReverted and is used to iterate over the raw logs and unpacked data for RollupStoreReverted events raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainRollupStoreRevertedIterator struct { + Event *BVMEigenDataLayrChainRollupStoreReverted // 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 *BVMEigenDataLayrChainRollupStoreRevertedIterator) 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(BVMEigenDataLayrChainRollupStoreReverted) + 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(BVMEigenDataLayrChainRollupStoreReverted) + 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 *BVMEigenDataLayrChainRollupStoreRevertedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BVMEigenDataLayrChainRollupStoreRevertedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BVMEigenDataLayrChainRollupStoreReverted represents a RollupStoreReverted event raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainRollupStoreReverted struct { + RollupBatchIndex *big.Int + DataStoreId uint32 + StratL2BlockNumber *big.Int + EndL2BlockNumber *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRollupStoreReverted is a free log retrieval operation binding the contract event 0xca227c67a02028763083580d42e8bdef4bb49c393068d05983421cd7a4a2a5be. +// +// Solidity: event RollupStoreReverted(uint256 rollupBatchIndex, uint32 dataStoreId, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) FilterRollupStoreReverted(opts *bind.FilterOpts) (*BVMEigenDataLayrChainRollupStoreRevertedIterator, error) { + + logs, sub, err := _BVMEigenDataLayrChain.contract.FilterLogs(opts, "RollupStoreReverted") + if err != nil { + return nil, err + } + return &BVMEigenDataLayrChainRollupStoreRevertedIterator{contract: _BVMEigenDataLayrChain.contract, event: "RollupStoreReverted", logs: logs, sub: sub}, nil +} + +// WatchRollupStoreReverted is a free log subscription operation binding the contract event 0xca227c67a02028763083580d42e8bdef4bb49c393068d05983421cd7a4a2a5be. +// +// Solidity: event RollupStoreReverted(uint256 rollupBatchIndex, uint32 dataStoreId, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) WatchRollupStoreReverted(opts *bind.WatchOpts, sink chan<- *BVMEigenDataLayrChainRollupStoreReverted) (event.Subscription, error) { + + logs, sub, err := _BVMEigenDataLayrChain.contract.WatchLogs(opts, "RollupStoreReverted") + 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(BVMEigenDataLayrChainRollupStoreReverted) + if err := _BVMEigenDataLayrChain.contract.UnpackLog(event, "RollupStoreReverted", 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 +} + +// ParseRollupStoreReverted is a log parse operation binding the contract event 0xca227c67a02028763083580d42e8bdef4bb49c393068d05983421cd7a4a2a5be. +// +// Solidity: event RollupStoreReverted(uint256 rollupBatchIndex, uint32 dataStoreId, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) ParseRollupStoreReverted(log types.Log) (*BVMEigenDataLayrChainRollupStoreReverted, error) { + event := new(BVMEigenDataLayrChainRollupStoreReverted) + if err := _BVMEigenDataLayrChain.contract.UnpackLog(event, "RollupStoreReverted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/batch-submitter/bindings/scc/state_commitment_chain.go b/batch-submitter/bindings/scc/state_commitment_chain.go index 816f8d0ca..78c62d47c 100644 --- a/batch-submitter/bindings/scc/state_commitment_chain.go +++ b/batch-submitter/bindings/scc/state_commitment_chain.go @@ -46,8 +46,8 @@ type LibBVMCodecChainInclusionProof struct { // StateCommitmentChainMetaData contains all meta data concerning the StateCommitmentChain contract. var StateCommitmentChainMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_libAddressManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l1messenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fraudProofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_sequencerPublishWindow\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_startBlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_length\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_tssMembers\",\"type\":\"address[]\"}],\"name\":\"DistributeTssReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_startBlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollBackL2Chain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_batchRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_batchSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_prevTotalElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"StateBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_batchRoot\",\"type\":\"bytes32\"}],\"name\":\"StateBatchDeleted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FRAUD_PROOF_WINDOW\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEQUENCER_PUBLISH_WINDOW\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_batch\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"_shouldStartAtElement\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"appendStateBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batches\",\"outputs\":[{\"internalType\":\"contractIChainStorageContainer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"structLib_BVMCodec.ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"}],\"name\":\"deleteStateBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastSequencerTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_lastSequencerTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBatches\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalBatches\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalElements\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"structLib_BVMCodec.ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"}],\"name\":\"insideFraudProofWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_inside\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"libAddressManager\",\"outputs\":[{\"internalType\":\"contractLib_AddressManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_shouldRollBack\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_shouldStartAtElement\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"rollBackL2Chain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_shouldRollBack\",\"type\":\"uint256\"}],\"name\":\"rollBackMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_element\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"structLib_BVMCodec.ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"siblings\",\"type\":\"bytes32[]\"}],\"internalType\":\"structLib_BVMCodec.ChainInclusionProof\",\"name\":\"_proof\",\"type\":\"tuple\"}],\"name\":\"verifyStateCommitment\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162002c4d38038062002c4d833981016040819052620000349162000090565b600080546001600160a01b039586166001600160a01b0319918216179091556001805494909516931692909217909255600291909155600355620000d8565b80516001600160a01b03811681146200008b57600080fd5b919050565b60008060008060808587031215620000a757600080fd5b620000b28562000073565b9350620000c26020860162000073565b6040860151606090960151949790965092505050565b612b6580620000e86000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637ad168a011610097578063c17b291b11610066578063c17b291b1461020f578063cfdf677e14610218578063e561dddc14610220578063f523f40d1461022857600080fd5b80637ad168a0146101c857806381eb62ef146101d057806389a1d980146101d9578063b768bb17146101fc57600080fd5b80633cb747bf116100d35780633cb747bf1461016c578063461a44781461018c5780635b4d90e21461019f5780637aa63a86146101b257600080fd5b80630bf3b5f2146100fa5780632169f79f1461010f578063299ca47814610122575b600080fd5b61010d6101083660046122f9565b610239565b005b61010d61011d3660046123d8565b610418565b6000546101429073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6001546101429073ffffffffffffffffffffffffffffffffffffffff1681565b61014261019a36600461243b565b610823565b61010d6101ad366004612523565b6108d0565b6101ba610a89565b604051908152602001610163565b6101ba610aa2565b6101ba60035481565b6101ec6101e7366004612523565b610abb565b6040519015158152602001610163565b6101ec61020a366004612558565b610b63565b6101ba60025481565b610142610c2d565b6101ba610c55565b61010d610236366004612615565b50565b610241610a89565b82146102ba5760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084015b60405180910390fd5b6102f86040518060400160405280600b81526020017f426f6e644d616e61676572000000000000000000000000000000000000000000815250610823565b6040517f02ad4d2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906302ad4d2a9060240160206040518083038186803b15801561035f57600080fd5b505afa158015610373573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610397919061262e565b6104095760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f73746564000000000000000000000000000000000060648201526084016102b1565b6104138382610cdc565b505050565b610420610a89565b82146104945760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084016102b1565b6104d26040518060400160405280600b81526020017f426f6e644d616e61676572000000000000000000000000000000000000000000815250610823565b6040517f02ad4d2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906302ad4d2a9060240160206040518083038186803b15801561053957600080fd5b505afa15801561054d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610571919061262e565b6105e35760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f73746564000000000000000000000000000000000060648201526084016102b1565b600083511161065a5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207375626d697420616e20656d7074792073746174652062617460448201527f63682e000000000000000000000000000000000000000000000000000000000060648201526084016102b1565b6106986040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610823565b73ffffffffffffffffffffffffffffffffffffffff16637aa63a866040518163ffffffff1660e01b815260040160206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107159190612650565b835161071f610a89565b6107299190612698565b11156107c35760405162461bcd60e51b815260206004820152604960248201527f4e756d626572206f6620737461746520726f6f74732063616e6e6f742065786360448201527f65656420746865206e756d626572206f662063616e6f6e6963616c207472616e60648201527f73616374696f6e732e0000000000000000000000000000000000000000000000608482015260a4016102b1565b6107ce838383610ed2565b6108198382423360405160200161080592919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052611010565b61041383836112c0565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061087a90859060040161271b565b60206040518083038186803b15801561089257600080fd5b505afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca9190612750565b92915050565b61090e6040518060400160405280601181526020017f42564d5f46726175645665726966696572000000000000000000000000000000815250610823565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109ae5760405162461bcd60e51b815260206004820152603b60248201527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f64206279207468652042564d5f467261756456657269666965722e000000000060648201526084016102b1565b6109b781611513565b610a035760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102b1565b610a0c81610abb565b610a80576040805162461bcd60e51b81526020600482015260248101919091527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f642077697468696e207468652066726175642070726f6f662077696e646f772e60648201526084016102b1565b610236816115d5565b600080610a94611806565b5064ffffffffff1692915050565b600080610aad611806565b64ffffffffff169392505050565b6000808260a00151806020019051810190610ad6919061276d565b50905080610b4c5760405162461bcd60e51b815260206004820152602560248201527f4261746368206865616465722074696d657374616d702063616e6e6f7420626560448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016102b1565b4260025482610b5b9190612698565b119392505050565b6000610b6e83611513565b610bba5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102b1565b610bd78360200151858460000151856020015187604001516118aa565b610c235760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e636c7573696f6e2070726f6f662e000000000000000060448201526064016102b1565b5060019392505050565b6000610c50604051806060016040528060218152602001612b0f60219139610823565b905090565b6000610c5f610c2d565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015610ca457600080fd5b505afa158015610cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c509190612650565b610d1a6040518060400160405280601781526020017f50726f78795f5f5453535f47726f75704d616e61676572000000000000000000815250610823565b73ffffffffffffffffffffffffffffffffffffffff16633231a7f083604051602001610d4891815260200190565b60405160208183030381529060405280519060200120836040518363ffffffff1660e01b8152600401610d7c92919061279d565b602060405180830381600087803b158015610d9657600080fd5b505af1158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce919061262e565b610e1a5760405162461bcd60e51b815260206004820152601760248201527f766572696679207369676e6174757265206661696c656400000000000000000060448201526064016102b1565b6040805160248082018590528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff523f40d00000000000000000000000000000000000000000000000000000000179052610ea273deaddeaddeaddeaddeaddeaddeaddeaddead2222621e848083611b18565b60405183907f8ef5d07412def056f6bfc680f359c8a0370cfacb2becaf67d01e2e372e08964a90600090a2505050565b610f106040518060400160405280601781526020017f50726f78795f5f5453535f47726f75704d616e61676572000000000000000000815250610823565b73ffffffffffffffffffffffffffffffffffffffff16633231a7f08484604051602001610f3e9291906127b6565b60405160208183030381529060405280519060200120836040518363ffffffff1660e01b8152600401610f7292919061279d565b602060405180830381600087803b158015610f8c57600080fd5b505af1158015610fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc4919061262e565b6104135760405162461bcd60e51b815260206004820152601760248201527f766572696679207369676e6174757265206661696c656400000000000000000060448201526064016102b1565b60006110506040518060400160405280600c81526020017f42564d5f50726f706f7365720000000000000000000000000000000000000000815250610823565b905060008061105d611806565b90925090503373ffffffffffffffffffffffffffffffffffffffff84161415611087575042611136565b426003548264ffffffffff1661109d9190612698565b106111365760405162461bcd60e51b815260206004820152604360248201527f43616e6e6f74207075626c69736820737461746520726f6f747320776974686960448201527f6e207468652073657175656e636572207075626c69636174696f6e2077696e6460648201527f6f772e0000000000000000000000000000000000000000000000000000000000608482015260a4016102b1565b60006040518060c0016040528061114b610c55565b815260200161115989611ba9565b8152602001885181526020018464ffffffffff16815260200187815260200186815250905080600001517f9cf3ad24eae3fd6d461e2f566b35b95b6d671871d9fcb45f8ac8030e4a8d21b382602001518360400151846060015185608001518660a001516040516111ce9594939291906127fe565b60405180910390a26111de610c2d565b73ffffffffffffffffffffffffffffffffffffffff16632015276c6112028361208d565b611227846040015185606001516112199190612698565b602887811b91909117901b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b15801561129f57600080fd5b505af11580156112b3573d6000803e3d6000fd5b5050505050505050505050565b60006113006040518060400160405280601781526020017f50726f78795f5f5453535f47726f75704d616e61676572000000000000000000815250610823565b73ffffffffffffffffffffffffffffffffffffffff16632cd00d536040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561134757600080fd5b505af115801561135b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113a19190810190612841565b905060008151116113f45760405162461bcd60e51b815260206004820152601860248201527f67657420747373206d656d6265727320696e206572726f72000000000000000060448201526064016102b1565b82516040516000917f0fae75d900000000000000000000000000000000000000000000000000000000916114309186914290879060240161292c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506114d1734200000000000000000000000000000000000020621e848083611b18565b42837ff533ef50019763ee9d95ad46e28350b533c11edd472ae7be93e8fae83c1b6d9986518560405161150592919061295b565b60405180910390a350505050565b600061151d610c2d565b82516040517f9507d39a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921691639507d39a916115759160040190815260200190565b60206040518083038186803b15801561158d57600080fd5b505afa1580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190612650565b6115ce8361208d565b1492915050565b6115dd610c2d565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b15801561162257600080fd5b505afa158015611636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165a9190612650565b8151106116a95760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420626174636820696e6465782e00000000000000000000000060448201526064016102b1565b6116b281611513565b6116fe5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102b1565b611706610c2d565b8151606083015173ffffffffffffffffffffffffffffffffffffffff929092169163167fd681919060281b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b1580156117a957600080fd5b505af11580156117bd573d6000803e3d6000fd5b5050505080600001517f8747b69ce8fdb31c3b9b0a67bd8049ad8c1a69ea417b69b12174068abd9cbd6482602001516040516117fb91815260200190565b60405180910390a250565b6000806000611813610c2d565b73ffffffffffffffffffffffffffffffffffffffff1663ccf8f9696040518163ffffffff1660e01b815260040160206040518083038186803b15801561185857600080fd5b505afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118909190612974565b64ffffffffff602882901c169460509190911c9350915050565b60008082116119215760405162461bcd60e51b815260206004820152603760248201527f4c69625f4d65726b6c65547265653a20546f74616c206c6561766573206d757360448201527f742062652067726561746572207468616e207a65726f2e00000000000000000060648201526084016102b1565b8184106119955760405162461bcd60e51b8152602060048201526024808201527f4c69625f4d65726b6c65547265653a20496e646578206f7574206f6620626f7560448201527f6e64732e0000000000000000000000000000000000000000000000000000000060648201526084016102b1565b61199e826120d6565b835114611a395760405162461bcd60e51b815260206004820152604d60248201527f4c69625f4d65726b6c65547265653a20546f74616c207369626c696e6773206460448201527f6f6573206e6f7420636f72726563746c7920636f72726573706f6e6420746f2060648201527f746f74616c206c65617665732e00000000000000000000000000000000000000608482015260a4016102b1565b8460005b8451811015611b0b578560011660011415611aa457848181518110611a6457611a646129b6565b602002602001015182604051602001611a87929190918252602082015260400190565b604051602081830303815290604052805190602001209150611af2565b81858281518110611ab757611ab76129b6565b6020026020010151604051602001611ad9929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b60019590951c9480611b03816129e5565b915050611a3d565b5090951495945050505050565b6001546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90611b7290869085908790600401612a1e565b600060405180830381600087803b158015611b8c57600080fd5b505af1158015611ba0573d6000803e3d6000fd5b50505050505050565b600080825111611c215760405162461bcd60e51b815260206004820152603460248201527f4c69625f4d65726b6c65547265653a204d7573742070726f766964652061742060448201527f6c65617374206f6e65206c65616620686173682e00000000000000000000000060648201526084016102b1565b815160011415611c4d5781600081518110611c3e57611c3e6129b6565b60200260200101519050919050565b60408051610200810182527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381527f633dc4d7da7256660a892f8f1604a44b5432649cc8ec5cb3ced4c4e6ac94dd1d60208201527f890740a8eb06ce9be422cb8da5cdafc2b58c0a5e24036c578de2a433c828ff7d818301527f3b8ec09e026fdc305365dfc94e189a81b38c7597b3d941c279f042e8206e0bd86060808301919091527fecd50eee38e386bd62be9bedb990706951b65fe053bd9d8a521af753d139e2da60808301527fdefff6d330bb5403f63b14f33b578274160de3a50df4efecf0e0db73bcdd3da560a08301527f617bdd11f7c0a11f49db22f629387a12da7596f9d1704d7465177c63d88ec7d760c08301527f292c23a9aa1d8bea7e2435e555a4a60e379a5a35f3f452bae60121073fb6eead60e08301527fe1cea92ed99acdcb045a6726b2f87107e8a61620a232cf4d7d5b5766b3952e106101008301527f7ad66c0a68c72cb89e4fb4303841966e4062a76ab97451e3b9fb526a5ceb7f826101208301527fe026cc5a4aed3c22a58cbd3d2ac754c9352c5436f638042dca99034e836365166101408301527f3d04cffd8b46a874edf5cfae63077de85f849a660426697b06a829c70dd1409c6101608301527fad676aa337a485e4728a0b240d92b3ef7b3c372d06d189322bfd5f61f1e7203e6101808301527fa2fca4a49658f9fab7aa63289c91b7c7b6c832a6d0e69334ff5b0a3483d09dab6101a08301527f4ebfd9cd7bca2505f7bef59cc1c12ecc708fff26ae4af19abe852afe9e20c8626101c08301527f2def10d13dd169f550f578bda343d9717a138562e0093b380a1120789d53cf106101e083015282518381529081018352909160009190602082018180368337505085519192506000918291508180805b600184111561206357611efe600285612a92565b9150611f0b600285612aa6565b600114905060005b82811015611fb7578a611f27826002612aba565b81518110611f3757611f376129b6565b602002602001015196508a816002611f4f9190612aba565b611f5a906001612698565b81518110611f6a57611f6a6129b6565b6020026020010151955086602089015285604089015287805190602001208b8281518110611f9a57611f9a6129b6565b602090810291909101015280611faf816129e5565b915050611f13565b5080156120335789611fca600186612af7565b81518110611fda57611fda6129b6565b60200260200101519550878360108110611ff657611ff66129b6565b602002015160001b945085602088015284604088015286805190602001208a8381518110612026576120266129b6565b6020026020010181815250505b8061203f576000612042565b60015b61204f9060ff1683612698565b93508261205b816129e5565b935050611eea565b89600081518110612076576120766129b6565b602002602001015198505050505050505050919050565b6020808201516040808401516060850151608086015160a087015193516000966120b9969591016127fe565b604051602081830303815290604052805190602001209050919050565b600080821161214d5760405162461bcd60e51b815260206004820152603060248201527f4c69625f4d65726b6c65547265653a2043616e6e6f7420636f6d70757465206360448201527f65696c286c6f675f3229206f6620302e0000000000000000000000000000000060648201526084016102b1565b816001141561215e57506000919050565b81600060805b6001811061219c578061217a600180831b612af7565b901b8316156121945761218d8183612698565b92811c9291505b60011c612164565b506001811b84146121b5576121b2600182612698565b90505b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561220e5761220e6121bc565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561225b5761225b6121bc565b604052919050565b600067ffffffffffffffff83111561227d5761227d6121bc565b6122ae60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601612214565b90508281528383830111156122c257600080fd5b828260208301376000602084830101529392505050565b600082601f8301126122ea57600080fd5b6121b583833560208501612263565b60008060006060848603121561230e57600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561233357600080fd5b61233f868287016122d9565b9150509250925092565b600067ffffffffffffffff821115612363576123636121bc565b5060051b60200190565b600082601f83011261237e57600080fd5b8135602061239361238e83612349565b612214565b82815260059290921b840181019181810190868411156123b257600080fd5b8286015b848110156123cd57803583529183019183016123b6565b509695505050505050565b6000806000606084860312156123ed57600080fd5b833567ffffffffffffffff8082111561240557600080fd5b6124118783880161236d565b945060208601359350604086013591508082111561242e57600080fd5b5061233f868287016122d9565b60006020828403121561244d57600080fd5b813567ffffffffffffffff81111561246457600080fd5b8201601f8101841361247557600080fd5b61248484823560208401612263565b949350505050565b600060c0828403121561249e57600080fd5b6124a66121eb565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff808211156124e557600080fd5b6124f1858386016122d9565b608084015260a084013591508082111561250a57600080fd5b50612517848285016122d9565b60a08301525092915050565b60006020828403121561253557600080fd5b813567ffffffffffffffff81111561254c57600080fd5b6124848482850161248c565b60008060006060848603121561256d57600080fd5b83359250602084013567ffffffffffffffff8082111561258c57600080fd5b6125988783880161248c565b935060408601359150808211156125ae57600080fd5b90850190604082880312156125c257600080fd5b6040516040810181811083821117156125dd576125dd6121bc565b604052823581526020830135828111156125f657600080fd5b6126028982860161236d565b6020830152508093505050509250925092565b60006020828403121561262757600080fd5b5035919050565b60006020828403121561264057600080fd5b815180151581146121b557600080fd5b60006020828403121561266257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156126ab576126ab612669565b500190565b6000815180845260005b818110156126d6576020818501810151868301820152016126ba565b818111156126e8576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006121b560208301846126b0565b73ffffffffffffffffffffffffffffffffffffffff8116811461023657600080fd5b60006020828403121561276257600080fd5b81516121b58161272e565b6000806040838503121561278057600080fd5b8251915060208301516127928161272e565b809150509250929050565b82815260406020820152600061248460408301846126b0565b604080825283519082018190526000906020906060840190828701845b828110156127ef578151845292840192908401906001016127d3565b50505092019290925292915050565b85815284602082015283604082015260a06060820152600061282360a08301856126b0565b828103608084015261283581856126b0565b98975050505050505050565b6000602080838503121561285457600080fd5b825167ffffffffffffffff81111561286b57600080fd5b8301601f8101851361287c57600080fd5b805161288a61238e82612349565b81815260059190911b820183019083810190878311156128a957600080fd5b928401925b828410156128d05783516128c18161272e565b825292840192908401906128ae565b979650505050505050565b600081518084526020808501945080840160005b8381101561292157815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016128ef565b509495945050505050565b84815283602082015282604082015260806060820152600061295160808301846128db565b9695505050505050565b82815260406020820152600061248460408301846128db565b60006020828403121561298657600080fd5b81517fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000811681146121b557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a1757612a17612669565b5060010190565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612a4d60608301856126b0565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612aa157612aa1612a63565b500490565b600082612ab557612ab5612a63565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612af257612af2612669565b500290565b600082821015612b0957612b09612669565b50039056fe436861696e53746f72616765436f6e7461696e65722d5343432d62617463686573a264697066735822122043182602b085b6fcf133cc97bad87f1b58ded854c7140977be88606e777b61df64736f6c63430008090033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_libAddressManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l1messenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fraudProofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_sequencerPublishWindow\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_startBlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_length\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_tssMembers\",\"type\":\"address[]\"}],\"name\":\"DistributeTssReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_startBlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollBackL2Chain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_batchRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_batchSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_prevTotalElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"StateBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_batchRoot\",\"type\":\"bytes32\"}],\"name\":\"StateBatchDeleted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FRAUD_PROOF_WINDOW\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEQUENCER_PUBLISH_WINDOW\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_batch\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"_shouldStartAtElement\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"appendStateBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batches\",\"outputs\":[{\"internalType\":\"contractIChainStorageContainer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"structLib_BVMCodec.ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"}],\"name\":\"deleteStateBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastSequencerTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_lastSequencerTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBatches\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalBatches\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalElements\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"structLib_BVMCodec.ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"}],\"name\":\"insideFraudProofWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_inside\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"libAddressManager\",\"outputs\":[{\"internalType\":\"contractLib_AddressManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_shouldRollBack\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_shouldStartAtElement\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"rollBackL2Chain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fraudProofWindow\",\"type\":\"uint256\"}],\"name\":\"setFraudProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_element\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"structLib_BVMCodec.ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"siblings\",\"type\":\"bytes32[]\"}],\"internalType\":\"structLib_BVMCodec.ChainInclusionProof\",\"name\":\"_proof\",\"type\":\"tuple\"}],\"name\":\"verifyStateCommitment\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162002d1938038062002d19833981016040819052620000349162000090565b600080546001600160a01b039586166001600160a01b0319918216179091556001805494909516931692909217909255600291909155600355620000d8565b80516001600160a01b03811681146200008b57600080fd5b919050565b60008060008060808587031215620000a757600080fd5b620000b28562000073565b9350620000c26020860162000073565b6040860151606090960151949790965092505050565b612c3180620000e86000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637ad168a011610097578063b768bb1711610066578063b768bb171461020f578063c17b291b14610222578063cfdf677e1461022b578063e561dddc1461023357600080fd5b80637ad168a0146101c857806381eb62ef146101d057806389a1d980146101d9578063ab59f7b8146101fc57600080fd5b80633cb747bf116100d35780633cb747bf1461016c578063461a44781461018c5780635b4d90e21461019f5780637aa63a86146101b257600080fd5b80630bf3b5f2146100fa5780632169f79f1461010f578063299ca47814610122575b600080fd5b61010d6101083660046123e3565b61023b565b005b61010d61011d3660046124c2565b61041a565b6000546101429073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6001546101429073ffffffffffffffffffffffffffffffffffffffff1681565b61014261019a366004612525565b610825565b61010d6101ad36600461260d565b6108d2565b6101ba610a8e565b604051908152602001610163565b6101ba610aa7565b6101ba60035481565b6101ec6101e736600461260d565b610ac0565b6040519015158152602001610163565b61010d61020a366004612642565b610b68565b6101ec61021d36600461265b565b610cbc565b6101ba60025481565b610142610d86565b6101ba610dae565b610243610a8e565b82146102bc5760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084015b60405180910390fd5b6102fa6040518060400160405280600b81526020017f426f6e644d616e61676572000000000000000000000000000000000000000000815250610825565b6040517f02ad4d2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906302ad4d2a9060240160206040518083038186803b15801561036157600080fd5b505afa158015610375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103999190612718565b61040b5760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f73746564000000000000000000000000000000000060648201526084016102b3565b6104158382610e35565b505050565b610422610a8e565b82146104965760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084016102b3565b6104d46040518060400160405280600b81526020017f426f6e644d616e61676572000000000000000000000000000000000000000000815250610825565b6040517f02ad4d2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906302ad4d2a9060240160206040518083038186803b15801561053b57600080fd5b505afa15801561054f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105739190612718565b6105e55760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f73746564000000000000000000000000000000000060648201526084016102b3565b600083511161065c5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207375626d697420616e20656d7074792073746174652062617460448201527f63682e000000000000000000000000000000000000000000000000000000000060648201526084016102b3565b61069a6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610825565b73ffffffffffffffffffffffffffffffffffffffff16637aa63a866040518163ffffffff1660e01b815260040160206040518083038186803b1580156106df57600080fd5b505afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610717919061273a565b8351610721610a8e565b61072b9190612782565b11156107c55760405162461bcd60e51b815260206004820152604960248201527f4e756d626572206f6620737461746520726f6f74732063616e6e6f742065786360448201527f65656420746865206e756d626572206f662063616e6f6e6963616c207472616e60648201527f73616374696f6e732e0000000000000000000000000000000000000000000000608482015260a4016102b3565b6107d0838383611034565b61081b8382423360405160200161080792919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052611172565b6104158383611422565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061087c9085906004016127e7565b60206040518083038186803b15801561089457600080fd5b505afa1580156108a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cc919061281c565b92915050565b6109106040518060400160405280601181526020017f42564d5f46726175645665726966696572000000000000000000000000000000815250610825565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109b05760405162461bcd60e51b815260206004820152603b60248201527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f64206279207468652042564d5f467261756456657269666965722e000000000060648201526084016102b3565b6109b981611639565b610a055760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102b3565b610a0e81610ac0565b610a82576040805162461bcd60e51b81526020600482015260248101919091527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f642077697468696e207468652066726175642070726f6f662077696e646f772e60648201526084016102b3565b610a8b816116fb565b50565b600080610a9961192c565b5064ffffffffff1692915050565b600080610ab261192c565b64ffffffffff169392505050565b6000808260a00151806020019051810190610adb9190612839565b50905080610b515760405162461bcd60e51b815260206004820152602560248201527f4261746368206865616465722074696d657374616d702063616e6e6f7420626560448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016102b3565b4260025482610b609190612782565b119392505050565b610ba66040518060400160405280600b81526020017f426f6e644d616e61676572000000000000000000000000000000000000000000815250610825565b6040517f02ad4d2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906302ad4d2a9060240160206040518083038186803b158015610c0d57600080fd5b505afa158015610c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c459190612718565b610cb75760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f73746564000000000000000000000000000000000060648201526084016102b3565b600255565b6000610cc783611639565b610d135760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102b3565b610d308360200151858460000151856020015187604001516119d0565b610d7c5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e636c7573696f6e2070726f6f662e000000000000000060448201526064016102b3565b5060019392505050565b6000610da9604051806060016040528060218152602001612bdb60219139610825565b905090565b6000610db8610d86565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015610dfd57600080fd5b505afa158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da9919061273a565b610e736040518060400160405280601781526020017f50726f78795f5f5453535f47726f75704d616e61676572000000000000000000815250610825565b73ffffffffffffffffffffffffffffffffffffffff16633231a7f083604051602001610ea191815260200190565b60405160208183030381529060405280519060200120836040518363ffffffff1660e01b8152600401610ed5929190612869565b602060405180830381600087803b158015610eef57600080fd5b505af1158015610f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f279190612718565b610f735760405162461bcd60e51b815260206004820152601760248201527f766572696679207369676e6174757265206661696c656400000000000000000060448201526064016102b3565b600082604051602401610f8891815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff523f40d00000000000000000000000000000000000000000000000000000000179052905061100473deaddeaddeaddeaddeaddeaddeaddeaddead2222621e848083611c3e565b60405183907f8ef5d07412def056f6bfc680f359c8a0370cfacb2becaf67d01e2e372e08964a90600090a2505050565b6110726040518060400160405280601781526020017f50726f78795f5f5453535f47726f75704d616e61676572000000000000000000815250610825565b73ffffffffffffffffffffffffffffffffffffffff16633231a7f084846040516020016110a0929190612882565b60405160208183030381529060405280519060200120836040518363ffffffff1660e01b81526004016110d4929190612869565b602060405180830381600087803b1580156110ee57600080fd5b505af1158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190612718565b6104155760405162461bcd60e51b815260206004820152601760248201527f766572696679207369676e6174757265206661696c656400000000000000000060448201526064016102b3565b60006111b26040518060400160405280600c81526020017f42564d5f50726f706f7365720000000000000000000000000000000000000000815250610825565b90506000806111bf61192c565b90925090503373ffffffffffffffffffffffffffffffffffffffff841614156111e9575042611298565b426003548264ffffffffff166111ff9190612782565b106112985760405162461bcd60e51b815260206004820152604360248201527f43616e6e6f74207075626c69736820737461746520726f6f747320776974686960448201527f6e207468652073657175656e636572207075626c69636174696f6e2077696e6460648201527f6f772e0000000000000000000000000000000000000000000000000000000000608482015260a4016102b3565b60006040518060c001604052806112ad610dae565b81526020016112bb89611ccf565b8152602001885181526020018464ffffffffff16815260200187815260200186815250905080600001517f9cf3ad24eae3fd6d461e2f566b35b95b6d671871d9fcb45f8ac8030e4a8d21b382602001518360400151846060015185608001518660a001516040516113309594939291906128ca565b60405180910390a2611340610d86565b73ffffffffffffffffffffffffffffffffffffffff16632015276c611364836121b3565b6113898460400151856060015161137b9190612782565b602887811b91909117901b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b15801561140157600080fd5b505af1158015611415573d6000803e3d6000fd5b5050505050505050505050565b60006114626040518060400160405280601781526020017f50726f78795f5f5453535f47726f75704d616e61676572000000000000000000815250610825565b73ffffffffffffffffffffffffffffffffffffffff16632cd00d536040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156114a957600080fd5b505af11580156114bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114e5919081019061290d565b905060008151116115385760405162461bcd60e51b815260206004820152601860248201527f67657420747373206d656d6265727320696e206572726f72000000000000000060448201526064016102b3565b82516040516000917f0fae75d90000000000000000000000000000000000000000000000000000000091611574918691429087906024016129f8565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506115f7734200000000000000000000000000000000000020621e848083611c3e565b42837ff533ef50019763ee9d95ad46e28350b533c11edd472ae7be93e8fae83c1b6d9986518560405161162b929190612a27565b60405180910390a350505050565b6000611643610d86565b82516040517f9507d39a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921691639507d39a9161169b9160040190815260200190565b60206040518083038186803b1580156116b357600080fd5b505afa1580156116c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116eb919061273a565b6116f4836121b3565b1492915050565b611703610d86565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b15801561174857600080fd5b505afa15801561175c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611780919061273a565b8151106117cf5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420626174636820696e6465782e00000000000000000000000060448201526064016102b3565b6117d881611639565b6118245760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102b3565b61182c610d86565b8151606083015173ffffffffffffffffffffffffffffffffffffffff929092169163167fd681919060281b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b1580156118cf57600080fd5b505af11580156118e3573d6000803e3d6000fd5b5050505080600001517f8747b69ce8fdb31c3b9b0a67bd8049ad8c1a69ea417b69b12174068abd9cbd64826020015160405161192191815260200190565b60405180910390a250565b6000806000611939610d86565b73ffffffffffffffffffffffffffffffffffffffff1663ccf8f9696040518163ffffffff1660e01b815260040160206040518083038186803b15801561197e57600080fd5b505afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b69190612a40565b64ffffffffff602882901c169460509190911c9350915050565b6000808211611a475760405162461bcd60e51b815260206004820152603760248201527f4c69625f4d65726b6c65547265653a20546f74616c206c6561766573206d757360448201527f742062652067726561746572207468616e207a65726f2e00000000000000000060648201526084016102b3565b818410611abb5760405162461bcd60e51b8152602060048201526024808201527f4c69625f4d65726b6c65547265653a20496e646578206f7574206f6620626f7560448201527f6e64732e0000000000000000000000000000000000000000000000000000000060648201526084016102b3565b611ac4826121fc565b835114611b5f5760405162461bcd60e51b815260206004820152604d60248201527f4c69625f4d65726b6c65547265653a20546f74616c207369626c696e6773206460448201527f6f6573206e6f7420636f72726563746c7920636f72726573706f6e6420746f2060648201527f746f74616c206c65617665732e00000000000000000000000000000000000000608482015260a4016102b3565b8460005b8451811015611c31578560011660011415611bca57848181518110611b8a57611b8a612a82565b602002602001015182604051602001611bad929190918252602082015260400190565b604051602081830303815290604052805190602001209150611c18565b81858281518110611bdd57611bdd612a82565b6020026020010151604051602001611bff929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b60019590951c9480611c2981612ab1565b915050611b63565b5090951495945050505050565b6001546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90611c9890869085908790600401612aea565b600060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b50505050505050565b600080825111611d475760405162461bcd60e51b815260206004820152603460248201527f4c69625f4d65726b6c65547265653a204d7573742070726f766964652061742060448201527f6c65617374206f6e65206c65616620686173682e00000000000000000000000060648201526084016102b3565b815160011415611d735781600081518110611d6457611d64612a82565b60200260200101519050919050565b60408051610200810182527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381527f633dc4d7da7256660a892f8f1604a44b5432649cc8ec5cb3ced4c4e6ac94dd1d60208201527f890740a8eb06ce9be422cb8da5cdafc2b58c0a5e24036c578de2a433c828ff7d818301527f3b8ec09e026fdc305365dfc94e189a81b38c7597b3d941c279f042e8206e0bd86060808301919091527fecd50eee38e386bd62be9bedb990706951b65fe053bd9d8a521af753d139e2da60808301527fdefff6d330bb5403f63b14f33b578274160de3a50df4efecf0e0db73bcdd3da560a08301527f617bdd11f7c0a11f49db22f629387a12da7596f9d1704d7465177c63d88ec7d760c08301527f292c23a9aa1d8bea7e2435e555a4a60e379a5a35f3f452bae60121073fb6eead60e08301527fe1cea92ed99acdcb045a6726b2f87107e8a61620a232cf4d7d5b5766b3952e106101008301527f7ad66c0a68c72cb89e4fb4303841966e4062a76ab97451e3b9fb526a5ceb7f826101208301527fe026cc5a4aed3c22a58cbd3d2ac754c9352c5436f638042dca99034e836365166101408301527f3d04cffd8b46a874edf5cfae63077de85f849a660426697b06a829c70dd1409c6101608301527fad676aa337a485e4728a0b240d92b3ef7b3c372d06d189322bfd5f61f1e7203e6101808301527fa2fca4a49658f9fab7aa63289c91b7c7b6c832a6d0e69334ff5b0a3483d09dab6101a08301527f4ebfd9cd7bca2505f7bef59cc1c12ecc708fff26ae4af19abe852afe9e20c8626101c08301527f2def10d13dd169f550f578bda343d9717a138562e0093b380a1120789d53cf106101e083015282518381529081018352909160009190602082018180368337505085519192506000918291508180805b600184111561218957612024600285612b5e565b9150612031600285612b72565b600114905060005b828110156120dd578a61204d826002612b86565b8151811061205d5761205d612a82565b602002602001015196508a8160026120759190612b86565b612080906001612782565b8151811061209057612090612a82565b6020026020010151955086602089015285604089015287805190602001208b82815181106120c0576120c0612a82565b6020908102919091010152806120d581612ab1565b915050612039565b50801561215957896120f0600186612bc3565b8151811061210057612100612a82565b6020026020010151955087836010811061211c5761211c612a82565b602002015160001b945085602088015284604088015286805190602001208a838151811061214c5761214c612a82565b6020026020010181815250505b80612165576000612168565b60015b6121759060ff1683612782565b93508261218181612ab1565b935050612010565b8960008151811061219c5761219c612a82565b602002602001015198505050505050505050919050565b6020808201516040808401516060850151608086015160a087015193516000966121df969591016128ca565b604051602081830303815290604052805190602001209050919050565b60008082116122735760405162461bcd60e51b815260206004820152603060248201527f4c69625f4d65726b6c65547265653a2043616e6e6f7420636f6d70757465206360448201527f65696c286c6f675f3229206f6620302e0000000000000000000000000000000060648201526084016102b3565b816001141561228457506000919050565b81600060805b600181106122c257806122a0600180831b612bc3565b901b8316156122ba576122b38183612782565b92811c9291505b60011c61228a565b506001811b84146122db576122d8600182612782565b90505b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612334576123346122e2565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612363576123636122e2565b604052919050565b600067ffffffffffffffff831115612385576123856122e2565b6123986020601f19601f8601160161233a565b90508281528383830111156123ac57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126123d457600080fd5b6122db8383356020850161236b565b6000806000606084860312156123f857600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561241d57600080fd5b612429868287016123c3565b9150509250925092565b600067ffffffffffffffff82111561244d5761244d6122e2565b5060051b60200190565b600082601f83011261246857600080fd5b8135602061247d61247883612433565b61233a565b82815260059290921b8401810191818101908684111561249c57600080fd5b8286015b848110156124b757803583529183019183016124a0565b509695505050505050565b6000806000606084860312156124d757600080fd5b833567ffffffffffffffff808211156124ef57600080fd5b6124fb87838801612457565b945060208601359350604086013591508082111561251857600080fd5b50612429868287016123c3565b60006020828403121561253757600080fd5b813567ffffffffffffffff81111561254e57600080fd5b8201601f8101841361255f57600080fd5b61256e8482356020840161236b565b949350505050565b600060c0828403121561258857600080fd5b612590612311565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff808211156125cf57600080fd5b6125db858386016123c3565b608084015260a08401359150808211156125f457600080fd5b50612601848285016123c3565b60a08301525092915050565b60006020828403121561261f57600080fd5b813567ffffffffffffffff81111561263657600080fd5b61256e84828501612576565b60006020828403121561265457600080fd5b5035919050565b60008060006060848603121561267057600080fd5b83359250602084013567ffffffffffffffff8082111561268f57600080fd5b61269b87838801612576565b935060408601359150808211156126b157600080fd5b90850190604082880312156126c557600080fd5b6040516040810181811083821117156126e0576126e06122e2565b604052823581526020830135828111156126f957600080fd5b61270589828601612457565b6020830152508093505050509250925092565b60006020828403121561272a57600080fd5b815180151581146122db57600080fd5b60006020828403121561274c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561279557612795612753565b500190565b6000815180845260005b818110156127c0576020818501810151868301820152016127a4565b818111156127d2576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006122db602083018461279a565b73ffffffffffffffffffffffffffffffffffffffff81168114610a8b57600080fd5b60006020828403121561282e57600080fd5b81516122db816127fa565b6000806040838503121561284c57600080fd5b82519150602083015161285e816127fa565b809150509250929050565b82815260406020820152600061256e604083018461279a565b604080825283519082018190526000906020906060840190828701845b828110156128bb5781518452928401929084019060010161289f565b50505092019290925292915050565b85815284602082015283604082015260a0606082015260006128ef60a083018561279a565b8281036080840152612901818561279a565b98975050505050505050565b6000602080838503121561292057600080fd5b825167ffffffffffffffff81111561293757600080fd5b8301601f8101851361294857600080fd5b805161295661247882612433565b81815260059190911b8201830190838101908783111561297557600080fd5b928401925b8284101561299c57835161298d816127fa565b8252928401929084019061297a565b979650505050505050565b600081518084526020808501945080840160005b838110156129ed57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016129bb565b509495945050505050565b848152836020820152826040820152608060608201526000612a1d60808301846129a7565b9695505050505050565b82815260406020820152600061256e60408301846129a7565b600060208284031215612a5257600080fd5b81517fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000811681146122db57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ae357612ae3612753565b5060010190565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612b19606083018561279a565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612b6d57612b6d612b2f565b500490565b600082612b8157612b81612b2f565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bbe57612bbe612753565b500290565b600082821015612bd557612bd5612753565b50039056fe436861696e53746f72616765436f6e7461696e65722d5343432d62617463686573a2646970667358221220b30beba4960fa88928361087fffaa0c31c4fa7875e48cc6408408349a9dbf8fb64736f6c63430008090033", } // StateCommitmentChainABI is the input ABI used to generate the binding from. @@ -621,25 +621,25 @@ func (_StateCommitmentChain *StateCommitmentChainTransactorSession) RollBackL2Ch return _StateCommitmentChain.Contract.RollBackL2Chain(&_StateCommitmentChain.TransactOpts, _shouldRollBack, _shouldStartAtElement, _signature) } -// RollBackMessage is a paid mutator transaction binding the contract method 0xf523f40d. +// SetFraudProofWindow is a paid mutator transaction binding the contract method 0xab59f7b8. // -// Solidity: function rollBackMessage(uint256 _shouldRollBack) returns() -func (_StateCommitmentChain *StateCommitmentChainTransactor) RollBackMessage(opts *bind.TransactOpts, _shouldRollBack *big.Int) (*types.Transaction, error) { - return _StateCommitmentChain.contract.Transact(opts, "rollBackMessage", _shouldRollBack) +// Solidity: function setFraudProofWindow(uint256 _fraudProofWindow) returns() +func (_StateCommitmentChain *StateCommitmentChainTransactor) SetFraudProofWindow(opts *bind.TransactOpts, _fraudProofWindow *big.Int) (*types.Transaction, error) { + return _StateCommitmentChain.contract.Transact(opts, "setFraudProofWindow", _fraudProofWindow) } -// RollBackMessage is a paid mutator transaction binding the contract method 0xf523f40d. +// SetFraudProofWindow is a paid mutator transaction binding the contract method 0xab59f7b8. // -// Solidity: function rollBackMessage(uint256 _shouldRollBack) returns() -func (_StateCommitmentChain *StateCommitmentChainSession) RollBackMessage(_shouldRollBack *big.Int) (*types.Transaction, error) { - return _StateCommitmentChain.Contract.RollBackMessage(&_StateCommitmentChain.TransactOpts, _shouldRollBack) +// Solidity: function setFraudProofWindow(uint256 _fraudProofWindow) returns() +func (_StateCommitmentChain *StateCommitmentChainSession) SetFraudProofWindow(_fraudProofWindow *big.Int) (*types.Transaction, error) { + return _StateCommitmentChain.Contract.SetFraudProofWindow(&_StateCommitmentChain.TransactOpts, _fraudProofWindow) } -// RollBackMessage is a paid mutator transaction binding the contract method 0xf523f40d. +// SetFraudProofWindow is a paid mutator transaction binding the contract method 0xab59f7b8. // -// Solidity: function rollBackMessage(uint256 _shouldRollBack) returns() -func (_StateCommitmentChain *StateCommitmentChainTransactorSession) RollBackMessage(_shouldRollBack *big.Int) (*types.Transaction, error) { - return _StateCommitmentChain.Contract.RollBackMessage(&_StateCommitmentChain.TransactOpts, _shouldRollBack) +// Solidity: function setFraudProofWindow(uint256 _fraudProofWindow) returns() +func (_StateCommitmentChain *StateCommitmentChainTransactorSession) SetFraudProofWindow(_fraudProofWindow *big.Int) (*types.Transaction, error) { + return _StateCommitmentChain.Contract.SetFraudProofWindow(&_StateCommitmentChain.TransactOpts, _fraudProofWindow) } // StateCommitmentChainDistributeTssRewardIterator is returned from FilterDistributeTssReward and is used to iterate over the raw logs and unpacked data for DistributeTssReward events raised by the StateCommitmentChain contract. diff --git a/batch-submitter/config.go b/batch-submitter/config.go index 566ae9ead..2a40bb252 100644 --- a/batch-submitter/config.go +++ b/batch-submitter/config.go @@ -63,6 +63,12 @@ type Config struct { // Tss manager client Url TssClientUrl string + // eigen layer upgrade block. + DaUpgradeBlock uint64 + + // DAAddress is the CTC contract address. + DAAddress string + // CTCAddress is the CTC contract address. CTCAddress string @@ -207,6 +213,8 @@ func NewConfig(ctx *cli.Context) (Config, error) { L1EthRpc: ctx.GlobalString(flags.L1EthRpcFlag.Name), L2EthRpc: ctx.GlobalString(flags.L2EthRpcFlag.Name), TssClientUrl: ctx.GlobalString(flags.TssClientUrl.Name), + DaUpgradeBlock: ctx.GlobalUint64(flags.DaUpgradeBlockFlag.Name), + DAAddress: ctx.GlobalString(flags.DaAddressFlag.Name), CTCAddress: ctx.GlobalString(flags.CTCAddressFlag.Name), SCCAddress: ctx.GlobalString(flags.SCCAddressFlag.Name), MinL1TxSize: ctx.GlobalUint64(flags.MinL1TxSizeFlag.Name), diff --git a/batch-submitter/drivers/sequencer/batch.go b/batch-submitter/drivers/sequencer/batch.go index f7e33e953..ff8c9deb5 100644 --- a/batch-submitter/drivers/sequencer/batch.go +++ b/batch-submitter/drivers/sequencer/batch.go @@ -3,7 +3,6 @@ package sequencer import ( "errors" "fmt" - l2types "github.com/mantlenetworkio/mantle/l2geth/core/types" ) @@ -79,7 +78,6 @@ func GenSequencerBatchParams( blockOffset uint64, batch []BatchElement, ) (*AppendSequencerBatchParams, error) { - var ( contexts []BatchContext groupedBlocks []groupedBlock @@ -88,7 +86,6 @@ func GenSequencerBatchParams( lastTimestamp uint64 lastBlockNumber uint64 ) - // Iterate over the batch elements, grouping the elements according to // the following criteria: // - All txs in the same group must have the same timestamp. @@ -182,7 +179,6 @@ func GenSequencerBatchParams( BlockNumber: blockNumber, }) } - return &AppendSequencerBatchParams{ ShouldStartAtElement: shouldStartAtElement - blockOffset, TotalElementsToAppend: uint64(len(batch)), diff --git a/batch-submitter/drivers/sequencer/driver.go b/batch-submitter/drivers/sequencer/driver.go index 0c5893e9e..26d1c4856 100644 --- a/batch-submitter/drivers/sequencer/driver.go +++ b/batch-submitter/drivers/sequencer/driver.go @@ -7,7 +7,7 @@ import ( "math/big" "strings" - "github.com/ethereum/go-ethereum" + 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" @@ -16,6 +16,7 @@ import ( "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" "github.com/mantlenetworkio/mantle/batch-submitter/bindings/ctc" + "github.com/mantlenetworkio/mantle/batch-submitter/bindings/da" "github.com/mantlenetworkio/mantle/bss-core/drivers" "github.com/mantlenetworkio/mantle/bss-core/metrics" "github.com/mantlenetworkio/mantle/bss-core/txmgr" @@ -37,18 +38,23 @@ type Config struct { MaxTxSize uint64 MaxPlaintextBatchSize uint64 CTCAddr common.Address + DaUpgradeBlock uint64 + DAAddr common.Address ChainID *big.Int PrivKey *ecdsa.PrivateKey BatchType BatchType } type Driver struct { - cfg Config - ctcContract *ctc.CanonicalTransactionChain - rawCtcContract *bind.BoundContract - walletAddr common.Address - ctcABI *abi.ABI - metrics *Metrics + cfg Config + ctcContract *ctc.CanonicalTransactionChain + daContract *da.BVMEigenDataLayrChain + rawCtcContract *bind.BoundContract + rawDaCtcContract *bind.BoundContract + walletAddr common.Address + ctcABI *abi.ABI + DaABI *abi.ABI + metrics *Metrics } func NewDriver(cfg Config) (*Driver, error) { @@ -76,15 +82,41 @@ func NewDriver(cfg Config) (*Driver, error) { cfg.L1Client, ) + daContract, err := da.NewBVMEigenDataLayrChain( + cfg.DAAddr, cfg.L1Client, + ) + if err != nil { + return nil, err + } + daParsed, err := abi.JSON(strings.NewReader( + da.BVMEigenDataLayrChainABI, + )) + if err != nil { + return nil, err + } + + daABI, err := da.BVMEigenDataLayrChainMetaData.GetAbi() + if err != nil { + return nil, err + } + + rawDaCtcContract := bind.NewBoundContract( + cfg.DAAddr, daParsed, cfg.L1Client, cfg.L1Client, + cfg.L1Client, + ) + walletAddr := crypto.PubkeyToAddress(cfg.PrivKey.PublicKey) return &Driver{ - cfg: cfg, - ctcContract: ctcContract, - rawCtcContract: rawCtcContract, - walletAddr: walletAddr, - ctcABI: ctcABI, - metrics: NewMetrics(cfg.Name), + cfg: cfg, + ctcContract: ctcContract, + daContract: daContract, + rawCtcContract: rawCtcContract, + rawDaCtcContract: rawDaCtcContract, + walletAddr: walletAddr, + ctcABI: ctcABI, + DaABI: daABI, + metrics: NewMetrics(cfg.Name), }, nil } @@ -139,15 +171,23 @@ func (d *Driver) GetBatchBlockRange( if err != nil { return nil, nil, err } - - // Add one because end is *exclusive*. - end := new(big.Int).Add(latestHeader.Number, bigOne) - + var end *big.Int + // for upgrade + if latestHeader.Number.Cmp(big.NewInt(int64(d.cfg.DaUpgradeBlock))) < 0 { + // Add one because end is *exclusive*. + end = new(big.Int).Add(latestHeader.Number, bigOne) + } else { + end, err = d.daContract.GetL2ConfirmedBlockNumber(&bind.CallOpts{ + Context: context.Background(), + }) + if err != nil { + return nil, nil, err + } + } if start.Cmp(end) > 0 { return nil, nil, fmt.Errorf("invalid range, "+ "end(%v) < start(%v)", end, start) } - return start, end, nil } @@ -214,7 +254,7 @@ func (d *Driver) CraftBatchTx( } // Encode the batch arguments using the configured encoding type. - batchArguments, err := batchParams.Serialize(d.cfg.BatchType) + batchArguments, err := batchParams.Serialize(d.cfg.BatchType, start, big.NewInt(int64(d.cfg.DaUpgradeBlock))) if err != nil { return nil, err } diff --git a/batch-submitter/drivers/sequencer/encoding.go b/batch-submitter/drivers/sequencer/encoding.go index 08dd7943d..18412429d 100644 --- a/batch-submitter/drivers/sequencer/encoding.go +++ b/batch-submitter/drivers/sequencer/encoding.go @@ -9,6 +9,7 @@ import ( "fmt" "io" "math" + "math/big" l2types "github.com/mantlenetworkio/mantle/l2geth/core/types" l2rlp "github.com/mantlenetworkio/mantle/l2geth/rlp" @@ -68,10 +69,10 @@ func (c BatchContext) MarkerBatchType() BatchType { // Write encodes the BatchContext into a 16-byte stream using the following // encoding: -// - num_sequenced_txs: 3 bytes -// - num_subsequent_queue_txs: 3 bytes -// - timestamp: 5 bytes -// - block_number: 5 bytes +// - num_sequenced_txs: 3 bytes +// - num_subsequent_queue_txs: 3 bytes +// - timestamp: 5 bytes +// - block_number: 5 bytes // // Note that writing to a bytes.Buffer cannot // error, so errors are ignored here @@ -85,10 +86,10 @@ func (c *BatchContext) Write(w *bytes.Buffer) { // Read decodes the BatchContext from the passed reader. If fewer than 16-bytes // remain, an error is returned. Otherwise the first 16-bytes will be read using // the expected encoding: -// - num_sequenced_txs: 3 bytes -// - num_subsequent_queue_txs: 3 bytes -// - timestamp: 5 bytes -// - block_number: 5 bytes +// - num_sequenced_txs: 3 bytes +// - num_subsequent_queue_txs: 3 bytes +// - timestamp: 5 bytes +// - block_number: 5 bytes func (c *BatchContext) Read(r io.Reader) error { if err := readUint64(r, &c.NumSequencedTxs, 3); err != nil { return err @@ -188,13 +189,13 @@ type AppendSequencerBatchParams struct { } // Write encodes the AppendSequencerBatchParams using the following format: -// - should_start_at_element: 5 bytes -// - total_elements_to_append: 3 bytes -// - num_contexts: 3 bytes -// - num_contexts * batch_context: num_contexts * 16 bytes -// - [num txs omitted] -// - tx_len: 3 bytes -// - tx_bytes: tx_len bytes +// - should_start_at_element: 5 bytes +// - total_elements_to_append: 3 bytes +// - num_contexts: 3 bytes +// - num_contexts * batch_context: num_contexts * 16 bytes +// - [num txs omitted] +// - tx_len: 3 bytes +// - tx_bytes: tx_len bytes // // Typed batches include a dummy context as the first context // where the timestamp is 0. The blocknumber is interpreted @@ -271,15 +272,57 @@ func (p *AppendSequencerBatchParams) Write( return nil } +func (p *AppendSequencerBatchParams) WriteNoTxn( + w *bytes.Buffer, + batchType BatchType, +) error { + _ = writeUint64(w, p.ShouldStartAtElement, 5) + _ = writeUint64(w, p.TotalElementsToAppend, 3) + + // There must be contexts if there are transactions + if len(p.Contexts) == 0 && len(p.Txs) != 0 { + return ErrMalformedBatch + } + + // There must be transactions if there are contexts + if len(p.Txs) == 0 && len(p.Contexts) != 0 { + return ErrMalformedBatch + } + + // copy the contexts as to not malleate the struct + // when it is a typed batch + contexts := make([]BatchContext, 0, len(p.Contexts)+1) + // Add the marker context, if any, for non-legacy encodings. + markerContext := batchType.MarkerContext() + if markerContext != nil { + contexts = append(contexts, *markerContext) + } + contexts = append(contexts, p.Contexts...) + + // Write number of contexts followed by each fixed-size BatchContext. + _ = writeUint64(w, uint64(len(contexts)), 3) + for _, context := range contexts { + context.Write(w) + } + return nil +} + // Serialize performs the same encoding as Write, but returns the resulting // bytes slice. func (p *AppendSequencerBatchParams) Serialize( batchType BatchType, + l2BlockNumber *big.Int, + upgradeBlock *big.Int, ) ([]byte, error) { - var buf bytes.Buffer - if err := p.Write(&buf, batchType); err != nil { - return nil, err + if l2BlockNumber.Cmp(upgradeBlock) > 0 { + if err := p.WriteNoTxn(&buf, batchType); err != nil { + return nil, err + } + } else { + if err := p.Write(&buf, batchType); err != nil { + return nil, err + } } return buf.Bytes(), nil } @@ -288,13 +331,13 @@ func (p *AppendSequencerBatchParams) Serialize( // stream does not terminate cleanly with an EOF while reading a tx_len, this // method will return an error. Otherwise, the stream will be parsed according // to the following format: -// - should_start_at_element: 5 bytes -// - total_elements_to_append: 3 bytes -// - num_contexts: 3 bytes -// - num_contexts * batch_context: num_contexts * 16 bytes -// - [num txs omitted] -// - tx_len: 3 bytes -// - tx_bytes: tx_len bytes +// - should_start_at_element: 5 bytes +// - total_elements_to_append: 3 bytes +// - num_contexts: 3 bytes +// - num_contexts * batch_context: num_contexts * 16 bytes +// - [num txs omitted] +// - tx_len: 3 bytes +// - tx_bytes: tx_len bytes func (p *AppendSequencerBatchParams) Read(r io.Reader) error { if err := readUint64(r, &p.ShouldStartAtElement, 5); err != nil { return err diff --git a/batch-submitter/flags/flags.go b/batch-submitter/flags/flags.go index 4940faba3..7f160cbe1 100644 --- a/batch-submitter/flags/flags.go +++ b/batch-submitter/flags/flags.go @@ -46,6 +46,18 @@ var ( Required: true, EnvVar: "TSS_CLIENT_RPC", } + DaAddressFlag = cli.StringFlag{ + Name: "da-address", + Usage: "Address of the da contract", + Required: true, + EnvVar: "DA_ADDRESS", + } + DaUpgradeBlockFlag = cli.Uint64Flag{ + Name: "da-upgrade-block", + Usage: "eigen layer upgrade block", + Required: true, + EnvVar: prefixEnvVar("DA_UPGRADE_BLOCK"), + } CTCAddressFlag = cli.StringFlag{ Name: "ctc-address", Usage: "Address of the CTC contract", @@ -264,6 +276,8 @@ var requiredFlags = []cli.Flag{ L1EthRpcFlag, L2EthRpcFlag, TssClientUrl, + DaAddressFlag, + DaUpgradeBlockFlag, CTCAddressFlag, SCCAddressFlag, MinL1TxSizeFlag, diff --git a/batch-submitter/go.mod b/batch-submitter/go.mod index 5217014d1..dcccae275 100644 --- a/batch-submitter/go.mod +++ b/batch-submitter/go.mod @@ -15,8 +15,8 @@ require ( github.com/mantlenetworkio/mantle/bss-core v0.0.0 github.com/mantlenetworkio/mantle/l2geth v0.0.0 github.com/mantlenetworkio/mantle/tss v0.0.0 - github.com/prometheus/client_golang v1.12.2 - github.com/stretchr/testify v1.7.1 + github.com/prometheus/client_golang v1.14.0 + github.com/stretchr/testify v1.8.1 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/urfave/cli v1.22.5 ) @@ -27,7 +27,7 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd v0.22.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/deckarep/golang-set v1.8.0 // indirect @@ -35,9 +35,9 @@ require ( github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect github.com/decred/dcrd/crypto/ripemd160 v1.0.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v3 v3.0.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/decred/dcrd/hdkeychain/v3 v3.0.0 // indirect - github.com/elastic/gosigar v0.12.0 // indirect + github.com/elastic/gosigar v0.14.2 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-stack/stack v1.8.1 // indirect @@ -52,16 +52,16 @@ require ( github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/magiconair/properties v1.8.6 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/pointerstructure v1.2.1 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.32.1 // indirect - github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect github.com/prometheus/tsdb v0.10.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/rjeczalik/notify v0.9.2 // indirect @@ -81,12 +81,12 @@ require ( github.com/tklauser/numcpus v0.4.0 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8 // indirect - golang.org/x/net v0.0.0-20220812174116-3211cb980234 // indirect - golang.org/x/sys v0.0.0-20220818161305-2296e01440c6 // indirect - golang.org/x/text v0.3.7 // indirect + golang.org/x/crypto v0.3.0 // indirect + golang.org/x/net v0.3.0 // indirect + golang.org/x/sys v0.3.0 // indirect + golang.org/x/text v0.5.0 // indirect golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect - google.golang.org/protobuf v1.27.1 // indirect + google.golang.org/protobuf v1.28.1 // indirect gopkg.in/ini.v1 v1.66.6 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/batch-submitter/go.sum b/batch-submitter/go.sum index b60d5f69e..1d25f77dd 100644 --- a/batch-submitter/go.sum +++ b/batch-submitter/go.sum @@ -170,8 +170,9 @@ github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -233,8 +234,9 @@ github.com/decred/dcrd/dcrec/edwards/v2 v2.0.1 h1:V6eqU1crZzuoFT4KG2LhaU5xDSdkHu github.com/decred/dcrd/dcrec/edwards/v2 v2.0.1/go.mod h1:d0H8xGMWbiIQP7gN3v2rByWUcuZPm9YsgmnfoxgbINc= github.com/decred/dcrd/dcrec/secp256k1/v3 v3.0.0 h1:sgNeV1VRMDzs6rzyPpxyM0jp317hnwiq58Filgag2xw= github.com/decred/dcrd/dcrec/secp256k1/v3 v3.0.0/go.mod h1:J70FGZSbzsjecRTiTzER+3f1KZLNaXkuv+yeFTKoxM8= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/decred/dcrd/dcrutil/v3 v3.0.0 h1:n6uQaTQynIhCY89XsoDk2WQqcUcnbD+zUM9rnZcIOZo= github.com/decred/dcrd/dcrutil/v3 v3.0.0/go.mod h1:iVsjcqVzLmYFGCZLet2H7Nq+7imV9tYcuY+0lC2mNsY= github.com/decred/dcrd/hdkeychain/v3 v3.0.0 h1:hOPb4c8+K6bE3a/qFtzt2Z2yzK4SpmXmxvCTFp8vMxI= @@ -268,8 +270,9 @@ github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaB github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= -github.com/elastic/gosigar v0.12.0 h1:AsdhYCJlTudhfOYQyFNgx+fIVTfrDO0V1ST0vHgiapU= github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= +github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= +github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -331,10 +334,12 @@ github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgO github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= @@ -652,8 +657,8 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= @@ -662,8 +667,9 @@ github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= @@ -718,8 +724,8 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= @@ -773,15 +779,17 @@ github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeD github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= -github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -790,16 +798,18 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic= github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4= @@ -879,6 +889,8 @@ github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3 github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -886,8 +898,10 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs= github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= @@ -991,8 +1005,8 @@ golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8 h1:GIAS/yBem/gq2MUqgNIzUHW7cJMmx3TGZOrnyYaNQ6c= -golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1095,8 +1109,10 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220812174116-3211cb980234 h1:RDqmgfe7SvlMWoqC3xwQ2blLO3fcWcxMa3eBLRdRW7E= -golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.3.0 h1:VWL6FNY2bEEmsGVKabSlHu5Irp34xmMRoqb/9lF9lxk= +golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1114,6 +1130,7 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1125,7 +1142,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1225,8 +1242,8 @@ golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220818161305-2296e01440c6 h1:Sx/u41w+OwrInGdEckYmEuU5gHoGSL4QbDz3S9s6j4U= -golang.org/x/sys v0.0.0-20220818161305-2296e01440c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1238,8 +1255,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1482,8 +1500,9 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/go.work.sum b/go.work.sum index 378e940ec..15336eb0f 100644 --- a/go.work.sum +++ b/go.work.sum @@ -222,7 +222,6 @@ github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219 h1:utua3L2IbQJmauC github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/flatbuffers v1.11.0 h1:O7CEyB8Cb3/DmtxODGtLHcEvpr81Jm5qLg/hsHnxA2A= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= @@ -416,7 +415,6 @@ github.com/onsi/ginkgo/v2 v2.4.0/go.mod h1:iHkDK1fKGcBoEHT5W7YBq4RFWaQulw+caOMkA github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/onsi/gomega v1.24.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= @@ -608,7 +606,6 @@ golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlz golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= diff --git a/l2geth/cmd/geth/main.go b/l2geth/cmd/geth/main.go index 65e162fcf..85dcac9b0 100644 --- a/l2geth/cmd/geth/main.go +++ b/l2geth/cmd/geth/main.go @@ -167,7 +167,8 @@ var ( utils.RollupGenesisTimeoutSecondsFlag, utils.SequencerClientHttpFlag, utils.RollupEigenClientHttpFlag, - utils.L1MsgSenderFlage, + utils.L1MsgSenderFlag, + utils.DtlEigenEnableFlag, } rpcFlags = []cli.Flag{ diff --git a/l2geth/cmd/geth/usage.go b/l2geth/cmd/geth/usage.go index 73107ccf9..6abb3545a 100644 --- a/l2geth/cmd/geth/usage.go +++ b/l2geth/cmd/geth/usage.go @@ -81,7 +81,8 @@ var AppHelpFlagGroups = []flagGroup{ utils.RollupGenesisTimeoutSecondsFlag, utils.SequencerClientHttpFlag, utils.RollupEigenClientHttpFlag, - utils.L1MsgSenderFlage, + utils.L1MsgSenderFlag, + utils.DtlEigenEnableFlag, }, }, { diff --git a/l2geth/cmd/utils/flags.go b/l2geth/cmd/utils/flags.go index fd19f8ec7..26c391935 100644 --- a/l2geth/cmd/utils/flags.go +++ b/l2geth/cmd/utils/flags.go @@ -817,12 +817,17 @@ var ( Value: "http://localhost:7979", EnvVar: "EIGEN_CLIENT_HTTP", } - L1MsgSenderFlage = cli.StringFlag{ + L1MsgSenderFlag = cli.StringFlag{ Name: "rollup.l1messagesender", Usage: "l1 message sender for eigen layer handle data", Value: "0x8A6acf3B8Ffc87FAcA8ad8A1b5d95C0f58c0D009", EnvVar: "L1_MSG_SENDER", } + DtlEigenEnableFlag = cli.BoolFlag{ + Name: "rollup.dtleigenenable", + Usage: "Enable the verifier", + EnvVar: "DTL_EIGEN_ENABLE", + } RollupClientHttpFlag = cli.StringFlag{ Name: "rollup.clienthttp", Usage: "HTTP endpoint for the rollup client", @@ -1171,8 +1176,11 @@ func setRollup(ctx *cli.Context, cfg *rollup.Config) { if ctx.GlobalIsSet(RollupEigenClientHttpFlag.Name) { cfg.EigenClientHttp = ctx.GlobalString(RollupEigenClientHttpFlag.Name) } - if ctx.GlobalIsSet(L1MsgSenderFlage.Name) { - cfg.L1MsgSender = ctx.GlobalString(L1MsgSenderFlage.Name) + if ctx.GlobalIsSet(L1MsgSenderFlag.Name) { + cfg.L1MsgSender = ctx.GlobalString(L1MsgSenderFlag.Name) + } + if ctx.GlobalIsSet(DtlEigenEnableFlag.Name) { + cfg.DtlEigenEnable = ctx.GlobalBool(DtlEigenEnableFlag.Name) } if ctx.GlobalIsSet(SequencerClientHttpFlag.Name) { cfg.SequencerClientHttp = ctx.GlobalString(SequencerClientHttpFlag.Name) diff --git a/l2geth/rollup/client_v2.go b/l2geth/rollup/client_v2.go new file mode 100644 index 000000000..4c620bcb0 --- /dev/null +++ b/l2geth/rollup/client_v2.go @@ -0,0 +1,138 @@ +package rollup + +import ( + "errors" + "fmt" + gresty "github.com/go-resty/resty/v2" + "github.com/mantlenetworkio/mantle/l2geth/core/types" + "math/big" + "strconv" +) + +var errDtlHTTPError = errors.New("dtl da http error") + +type RollupBatchIndex struct { + BatchIndex uint64 `json:"batchIndex"` +} + +type StoreResponse struct { + OriginDataStoreId uint32 `json:"origin_data_store_id"` + DataStoreId uint32 `json:"data_store_id"` + ConfirmAt uint32 `json:"confirm_at"` + Status uint8 `json:"status"` +} + +type DataStore struct { + Index uint64 `json:"index"` + DataStoreId uint32 `json:"data_store_id"` + Status uint8 `json:"status"` + ConfirmAt uint32 `json:"confirm_at"` +} + +type DataStoreId struct { + BatchIndex uint64 `json:"batchIndex"` + BatchIndexDataStore DataStore `json:"dataStore"` +} + +type TransactionBatchResponseV2 struct { + DsId uint64 `json:"dsId"` + Transactions []transaction `json:"batchTx"` +} + +type DtlEigenClient interface { + GetDtlLatestBatchIndex() (*uint64, error) + GetDtlRollupStoreByBatchIndex(batchIndex int64) (*StoreResponse, error) + GetDtlBatchTransactionByDataStoreId(storeNumber uint32) ([]*types.Transaction, error) +} + +type DtlClient struct { + client *gresty.Client + chainID *big.Int +} + +func NewDtlEigenClient(url string, chainID *big.Int) *DtlClient { + client := gresty.New() + client.SetHostURL(url) + client.OnAfterResponse(func(c *gresty.Client, r *gresty.Response) error { + statusCode := r.StatusCode() + if statusCode >= 400 { + method := r.Request.Method + url := r.Request.URL + return fmt.Errorf("%d cannot %s %s: %w", statusCode, method, url, errDtlHTTPError) + } + return nil + }) + return &DtlClient{ + client: client, + chainID: chainID, + } +} + +func (dc *DtlClient) GetDtlLatestBatchIndex() (batchIndex *uint64, err error) { + var rollupBatchIndex RollupBatchIndex + response, err := dc.client.R(). + SetResult(&rollupBatchIndex). + Get("/da/getLatestTransactionBatchIndex") + if err != nil { + return nil, fmt.Errorf("cannot get latest batch index: %w", err) + } + if response.StatusCode() != 200 { + return nil, errors.New("fetch latest batch index fail") + } + return &rollupBatchIndex.BatchIndex, err +} + +func (dc *DtlClient) GetDtlRollupStoreByBatchIndex(batchIndex int64) (*StoreResponse, error) { + var dataStoreId DataStoreId + response, err := dc.client.R(). + SetPathParams(map[string]string{"batchIndex": strconv.FormatInt(batchIndex, 10)}). + SetResult(&dataStoreId). + Get("/da/getDataStoreListByBatchIndex/{batchIndex}") + if err != nil { + return nil, fmt.Errorf("cannot get roll store data: %w", err) + } + if response.StatusCode() != 200 { + return nil, errors.New("fetch roll store data fail") + } + rollupStore := &StoreResponse{ + OriginDataStoreId: dataStoreId.BatchIndexDataStore.DataStoreId, + DataStoreId: dataStoreId.BatchIndexDataStore.DataStoreId, + ConfirmAt: dataStoreId.BatchIndexDataStore.ConfirmAt, + Status: dataStoreId.BatchIndexDataStore.Status, + } + return rollupStore, nil +} + +func (dc *DtlClient) GetDtlBatchTransactionByDataStoreId(storeNumber uint32) ([]*types.Transaction, error) { + response, err := dc.client.R(). + SetPathParams(map[string]string{"dsId": strconv.FormatInt(int64(storeNumber), 10)}). + SetResult(&TransactionBatchResponseV2{}). + Get("/da/getBatchTxsByDataStoreId/{dsId}") + if err != nil { + return nil, fmt.Errorf("cannot get tx list: %w", err) + } + if response.StatusCode() == 200 { + txBatch, ok := response.Result().(*TransactionBatchResponseV2) + if !ok { + return nil, fmt.Errorf("cannot parse transaction batch response") + } + return parseTransactionBatchResponseV2(txBatch, dc.chainID) + } else { + return nil, errors.New("fetch tx list fail") + } +} + +func parseTransactionBatchResponseV2(txBatch *TransactionBatchResponseV2, chainID *big.Int) ([]*types.Transaction, error) { + if txBatch == nil { + return nil, errors.New("txBatch is nil") + } + var txs []*types.Transaction + for i := 0; i < len(txBatch.Transactions); i++ { + transaction, err := batchedTransactionToTransaction(&txBatch.Transactions[i], chainID) + if err != nil { + return nil, err + } + txs = append(txs, transaction) + } + return txs, nil +} diff --git a/l2geth/rollup/config.go b/l2geth/rollup/config.go index 0bfdcd830..ca892c347 100644 --- a/l2geth/rollup/config.go +++ b/l2geth/rollup/config.go @@ -24,6 +24,8 @@ type Config struct { L1MsgSender string + DtlEigenEnable bool + // Owner of the GasPriceOracle contract GasPriceOracleOwnerAddress common.Address // Turns on checking of state for L2 gas price diff --git a/l2geth/rollup/eigenda/client.go b/l2geth/rollup/eigenda/client.go index 757e9b77d..0942aa40a 100644 --- a/l2geth/rollup/eigenda/client.go +++ b/l2geth/rollup/eigenda/client.go @@ -12,7 +12,7 @@ import ( "github.com/pkg/errors" ) -var errTssHTTPError = errors.New("eigen da http error") +var errEigenHTTPError = errors.New("eigen da http error") type EigenClient interface { GetLatestTransactionBatchIndex() (*uint64, error) @@ -32,7 +32,7 @@ func NewEigenClient(url string) *Client { if statusCode >= 400 { method := r.Request.Method url := r.Request.URL - return fmt.Errorf("%d cannot %s %s: %w", statusCode, method, url, errTssHTTPError) + return fmt.Errorf("%d cannot %s %s: %w", statusCode, method, url, errEigenHTTPError) } return nil }) diff --git a/l2geth/rollup/sync_service.go b/l2geth/rollup/sync_service.go index 20f6f9d6f..5d07ce08d 100644 --- a/l2geth/rollup/sync_service.go +++ b/l2geth/rollup/sync_service.go @@ -61,6 +61,8 @@ type SyncService struct { RollupGpo *gasprice.RollupOracle client RollupClient eigenClient eigenlayer.EigenClient + dtlEigenClient DtlEigenClient + dtlEigenEnable bool l1MsgSender string syncing atomic.Value chainHeadSub event.Subscription @@ -119,6 +121,10 @@ func NewSyncService(ctx context.Context, cfg Config, txpool *core.TxPool, bc *co if eigenClient == nil { return nil, fmt.Errorf("new eigen client fail") } + dtlEigenClient := NewDtlEigenClient(cfg.RollupClientHttp, chainID) + if dtlEigenClient == nil { + return nil, fmt.Errorf("new eigen client fail") + } // Ensure sane values for the fee thresholds if cfg.FeeThresholdDown != nil { // The fee threshold down should be less than 1 @@ -147,6 +153,8 @@ func NewSyncService(ctx context.Context, cfg Config, txpool *core.TxPool, bc *co chainHeadCh: make(chan core.ChainHeadEvent, 1), client: client, eigenClient: eigenClient, + dtlEigenClient: dtlEigenClient, + dtlEigenEnable: cfg.DtlEigenEnable, l1MsgSender: cfg.L1MsgSender, db: db, pollInterval: pollInterval, @@ -509,8 +517,14 @@ func (s *SyncService) syncBatchesToTip() error { } func (s *SyncService) syncEigenBatchesToTip() error { - if err := s.syncToTip(s.syncEigenBatches, s.eigenClient.GetLatestTransactionBatchIndex); err != nil { - return fmt.Errorf("Cannot sync eigen transaction batches to tip: %w", err) + if s.dtlEigenEnable { + if err := s.syncToTip(s.syncEigenBatches, s.dtlEigenClient.GetDtlLatestBatchIndex); err != nil { + return fmt.Errorf("Cannot sync da dtl transaction batches to tip: %w", err) + } + } else { + if err := s.syncToTip(s.syncEigenBatches, s.eigenClient.GetLatestTransactionBatchIndex); err != nil { + return fmt.Errorf("Cannot sync eigen transaction batches to tip: %w", err) + } } return nil } @@ -949,6 +963,7 @@ func (s *SyncService) applyIndexedTransaction(tx *types.Transaction) error { } log.Trace("Applying indexed transaction", "index", *index) next := s.GetNextIndex() + log.Info("indexed transaction", "index", *index, "next", next) if *index == next { return s.applyTransactionToTip(tx) } @@ -1348,11 +1363,19 @@ func (s *SyncService) syncBatches() (*uint64, error) { } func (s *SyncService) syncEigenBatches() (*uint64, error) { - index, err := s.sync(s.eigenClient.GetLatestTransactionBatchIndex, s.GetEigenNextBatchIndex, s.syncEigenTransactionBatchRange) - if err != nil { - return nil, fmt.Errorf("cannot sync eigen batches: %w", err) + if s.dtlEigenEnable { + index, err := s.sync(s.dtlEigenClient.GetDtlLatestBatchIndex, s.GetEigenNextBatchIndex, s.syncEigenTransactionBatchRange) + if err != nil { + return nil, fmt.Errorf("cannot sync eigen batches: %w", err) + } + return index, nil + } else { + index, err := s.sync(s.eigenClient.GetLatestTransactionBatchIndex, s.GetEigenNextBatchIndex, s.syncEigenTransactionBatchRange) + if err != nil { + return nil, fmt.Errorf("cannot sync eigen batches: %w", err) + } + return index, nil } - return index, nil } // syncTransactionBatchRange will sync a range of batched transactions from @@ -1386,28 +1409,54 @@ func (s *SyncService) syncEigenTransactionBatchRange(start, end uint64) error { log.Info("Syncing eigen transaction batch range", "start", start, "end", end) for i := start; i <= end; i++ { log.Debug("Fetching transaction batch", "index", i) - rollupInfo, err := s.eigenClient.GetRollupStoreByRollupBatchIndex(int64(i)) - if err != nil { - return fmt.Errorf("cannot get rollup store by batch index: %w", err) - } - if rollupInfo.DataStoreId != 0 { - txs, err := s.eigenClient.GetBatchTransactionByDataStoreId(rollupInfo.DataStoreId, s.l1MsgSender) + if s.dtlEigenEnable { + dtlRollupInfo, err := s.dtlEigenClient.GetDtlRollupStoreByBatchIndex(int64(i)) + if err != nil { + return fmt.Errorf("cannot get rollup store by batch index from dtl: %w", err) + } + if dtlRollupInfo.DataStoreId != 0 { + txs, err := s.dtlEigenClient.GetDtlBatchTransactionByDataStoreId(dtlRollupInfo.DataStoreId) + if err != nil { + return fmt.Errorf("cannot get eigen transaction batch from dtl: %w", err) + } + for _, tx := range txs { + verified, err := s.verifyTx(tx) + if err != nil { + return err + } + if verified { + if err := s.applyBatchedTransaction(tx); err != nil { + return fmt.Errorf("cannot apply batched transaction: %w", err) + } + } + } + log.Info("set latest eigen batch index", "index", i) + s.SetLatestEigenBatchIndex(&i) + } + } else { + rollupInfo, err := s.eigenClient.GetRollupStoreByRollupBatchIndex(int64(i)) if err != nil { - return fmt.Errorf("cannot get eigen transaction batch: %w", err) + return fmt.Errorf("cannot get rollup store by batch index: %w", err) } - for _, tx := range txs { - verified, err := s.verifyTx(tx) + if rollupInfo.DataStoreId != 0 { + txs, err := s.eigenClient.GetBatchTransactionByDataStoreId(rollupInfo.DataStoreId, s.l1MsgSender) if err != nil { - return err + return fmt.Errorf("cannot get eigen transaction batch: %w", err) } - if verified { - if err := s.applyBatchedTransaction(tx); err != nil { - return fmt.Errorf("cannot apply batched transaction: %w", err) + for _, tx := range txs { + verified, err := s.verifyTx(tx) + if err != nil { + return err + } + if verified { + if err := s.applyBatchedTransaction(tx); err != nil { + return fmt.Errorf("cannot apply batched transaction: %w", err) + } } } + log.Info("set latest eigen batch index", "index", i) + s.SetLatestEigenBatchIndex(&i) } - log.Info("set latest eigen batch index", "index", i) - s.SetLatestEigenBatchIndex(&i) } } } diff --git a/mt-batcher/bindings/bvm_eigen_datalayr_chain.go b/mt-batcher/bindings/bvm_eigen_datalayr_chain.go index 5bd3f78bc..27abeed09 100644 --- a/mt-batcher/bindings/bvm_eigen_datalayr_chain.go +++ b/mt-batcher/bindings/bvm_eigen_datalayr_chain.go @@ -93,8 +93,8 @@ type IDataLayrServiceManagerDataStoreSearchData struct { // BVMEigenDataLayrChainMetaData contains all meta data concerning the BVMEigenDataLayrChain contract. var BVMEigenDataLayrChainMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"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\":\"uint256\",\"name\":\"rollupBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rollupBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreReverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BLOCK_STALE_MEASURE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRAUD_STRING\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"durationDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"globalDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"confirmer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreSearchData\",\"name\":\"searchData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"startL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"reConfirmedBatchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"name\":\"confirmData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dataManageAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"dataStoreIdToL2RollUpBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"dataStoreIdToRollupStoreNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fraudProofPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL2ConfirmedBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dataStoreId\",\"type\":\"uint32\"}],\"name\":\"getL2RollUpBlockByDataStoreId\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"internalType\":\"structBVM_EigenDataLayrChain.BatchRollupBlock\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL2StoredBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupBatchIndex\",\"type\":\"uint256\"}],\"name\":\"getRollupStoreByRollupBatchIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"confirmAt\",\"type\":\"uint32\"},{\"internalType\":\"enumBVM_EigenDataLayrChain.RollupStoreStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structBVM_EigenDataLayrChain.RollupStore\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_dataManageAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_block_stale_measure\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fraudProofPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2SubmittedBlockNumber\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ConfirmedBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2StoredBlockNumber\",\"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\":\"bytes[]\",\"name\":\"polys\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"parse\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fraudulentStoreNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"durationDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"globalDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"confirmer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreSearchData\",\"name\":\"searchData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"firstChunkNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes[]\",\"name\":\"polys\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"interpolationPoly\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"revealProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"zeroPoly\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"zeroPolyProof\",\"type\":\"bytes\"}],\"internalType\":\"structDataLayrDisclosureLogic.MultiRevealProof[]\",\"name\":\"multiRevealProofs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"polyEquivalenceProof\",\"type\":\"tuple\"}],\"internalType\":\"structBVM_EigenDataLayrChain.DisclosureProofs\",\"name\":\"disclosureProofs\",\"type\":\"tuple\"}],\"name\":\"proveFraud\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"removeFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupBatchIndex\",\"type\":\"uint256\"}],\"name\":\"resetRollupBatchData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rollupBatchIndexRollupStores\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"confirmAt\",\"type\":\"uint32\"},{\"internalType\":\"enumBVM_EigenDataLayrChain.RollupStoreStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"startL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"totalOperatorsIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"name\":\"storeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"unavailableFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dataManageAddress\",\"type\":\"address\"}],\"name\":\"updateDataLayrManagerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fraudProofPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFraudProofPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2ConfirmedBlockNumber\",\"type\":\"uint256\"}],\"name\":\"updateL2ConfirmedBlockNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2StoredBlockNumber\",\"type\":\"uint256\"}],\"name\":\"updateL2StoredBlockNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"updateSequencerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50614950806100206000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f578063c8fff01b116100a2578063f249502911610071578063f2495029146104cd578063f2a8f124146104ed578063f2fde38b146104f6578063f7db97951461050957600080fd5b8063c8fff01b1461045d578063c96c0d3814610470578063d13f90b4146104a7578063d7fbc2e2146104ba57600080fd5b806392f30a45116100de57806392f30a45146103d25780639495de4014610421578063990fca6614610434578063b537c4c71461043d57600080fd5b8063715018a6146103915780637bd85879146103995780638bea6cae146103ac5780638da5cb5b146103b457600080fd5b806332c58f7a116101875780635c1bba38116101565780635c1bba38146103275780635d42ffb71461036c5780635e4a3056146103755780635e8b3f2d1461038857600080fd5b806332c58f7a1461029e5780633c762984146102b157806346b2eb9b146102ba57806359cb6391146102c257600080fd5b80632e260ac3116101c35780632e260ac3146102465780632e64b4c0146102595780632e72866b1461026c578063301b39ab1461028c57600080fd5b806302d777de146101f5578063060ee9a41461020a5780630a33202e1461020a5780631f944c8f1461021d575b600080fd5b610208610203366004613b3e565b61051c565b005b610208610218366004613b3e565b6105f5565b61023061022b366004613b59565b6106ce565b60405161023d9190613c0b565b60405180910390f35b610208610254366004613e68565b610837565b610208610267366004613f03565b610ec0565b61027f61027a366004613f03565b610f52565b60405161023d9190613f86565b609a545b60405190815260200161023d565b6102086102ac366004613b3e565b61100b565b610290609d5481565b6102306110e7565b6103176102d0366004613f03565b609e6020526000908152604090205463ffffffff80821691640100000000810482169168010000000000000000820416906c01000000000000000000000000900460ff1684565b60405161023d9493929190613fc4565b6097546103479073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161023d565b610290609b5481565b610208610383366004613ff7565b611103565b61029060995481565b61020861142a565b6102086103a7366004614085565b61143e565b609b54610290565b60335473ffffffffffffffffffffffffffffffffffffffff16610347565b6104046103e03660046140ef565b609f6020526000908152604090208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161023d565b61020861042f366004613f03565b611bc2565b610290609a5481565b61029061044b3660046140ef565b60a06020526000908152604090205481565b61020861046b366004613b3e565b611c54565b61048361047e3660046140ef565b611d28565b6040805182518152602080840151908201529181015115159082015260600161023d565b6102086104b536600461410c565b611d92565b6102086104c8366004613f03565b611f78565b6098546103479073ffffffffffffffffffffffffffffffffffffffff1681565b610290609c5481565b610208610504366004613b3e565b61200a565b610208610517366004613f03565b6120a7565b60975473ffffffffffffffffffffffffffffffffffffffff1633146105ae5760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520646c60448201527f736d20616464726573730000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b609880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60975473ffffffffffffffffffffffffffffffffffffffff1633146106825760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e2072656d6f766520667260448201527f6175642070726f6f66206164647265737300000000000000000000000000000060648201526084016105a5565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a16020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6060806000845b848351101561082b576000610750826106ef6020826141b7565b6106fa9060016141cb565b6107059060206141e3565b61070f9190614202565b855161071b9089614202565b848c8c8881811061072e5761072e614219565b90506020028101906107409190614248565b61074b929150614202565b612197565b90508389898581811061076557610765614219565b90506020028101906107779190614248565b849061078385836141cb565b92610790939291906142ad565b6040516020016107a2939291906142d7565b6040516020818303038152906040529350835186116107c1575061082b565b8888848181106107d3576107d3614219565b90506020028101906107e59190614248565b90506107f182846141cb565b141561080d5782610801816142ff565b93505060019150610825565b6108188160016141cb565b61082290836141cb565b91505b506106d5565b50909695505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146108c45760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79207468652073657175656e6365722063616e2073746f72652064617460448201527f610000000000000000000000000000000000000000000000000000000000000060648201526084016105a5565b855160409081015163ffffffff166000908152609f6020522054851480156109075750855160409081015163ffffffff166000908152609f602052206001015484145b80156109355750855160409081015163ffffffff166000908152609f602052206002015460ff161515811515145b6109cd5760405162461bcd60e51b815260206004820152605560248201527f446174612073746f72652065697468657220776173206e6f7420696e6974696160448201527f6c697a65642062792074686520726f6c6c757020636f6e74726163742c206f7260648201527f20697320616c726561647920636f6e6669726d65640000000000000000000000608482015260a4016105a5565b855160409081015163ffffffff16600090815260a0602052205460001914610a835760405162461bcd60e51b815260206004820152605560248201527f446174612073746f72652065697468657220776173206e6f7420696e6974696160448201527f6c697a65642062792074686520726f6c6c757020636f6e74726163742c206f7260648201527f20697320616c726561647920636f6e6669726d65640000000000000000000000608482015260a4016105a5565b6098546040517f5189951500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690635189951590610add908b908b908b90600401614363565b600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b5050505080610cf55760408051608081018252875182015163ffffffff90811682528851830151166020820152609c549091820190610b4a90426141cb565b63ffffffff16815260200160019052609d546000908152609e602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115610c6057610c60613f1c565b02179055505050609b849055609d8054875160409081015163ffffffff16600090815260a06020529081208290557fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f6729290610cba836142ff565b909155508751604090810151815163ffffffff93841681529216602083015281018790526060810186905260800160405180910390a1610eb6565b60405180608001604052808463ffffffff16815260200187600001516040015163ffffffff168152602001609c5442610d2e91906141cb565b63ffffffff168152602001600190526000838152609e602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115610e4157610e41613f1c565b021790555050865160409081015163ffffffff908116600090815260a060209081529083902086905589518301518351878152921690820152908101879052606081018690527fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f672915060800160405180910390a15b5050505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff163314610f4d5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e20736574206c6174657360448201527f74206c3220626c6f636b206e756d62657200000000000000000000000000000060648201526084016105a5565b609b55565b610f7a6040805160808101825260008082526020820181905291810182905290606082015290565b6000828152609e60209081526040918290208251608081018452815463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316938101939093529060608301906c01000000000000000000000000900460ff166002811115610ff157610ff1613f1c565b600281111561100257611002613f1c565b90525092915050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146110985760405162461bcd60e51b815260206004820152603a60248201527f4f6e6c79207468652073657175656e6365722063616e2073657420667261756460448201527f2070726f6f66206164647265737320756e617661696c61626c6500000000000060648201526084016105a5565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a16020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6040518060800160405280606081526020016148bb6060913981565b60975473ffffffffffffffffffffffffffffffffffffffff1633146111905760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79207468652073657175656e6365722063616e2073746f72652064617460448201527f610000000000000000000000000000000000000000000000000000000000000060648201526084016105a5565b6099546111a363ffffffff871643614202565b106111f05760405162461bcd60e51b815260206004820152601e60248201527f7374616b65732074616b656e2066726f6d20746f6f206c6f6e672061676f000060448201526064016105a5565b609854604080517f72d18e8d000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916372d18e8d916004808301926020929190829003018186803b15801561125b57600080fd5b505afa15801561126f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611293919061442d565b9050609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf49ea733308a8a888f8f6040518863ffffffff1660e01b81526004016112fc979695949392919061444a565b602060405180830381600087803b15801561131657600080fd5b505af115801561132a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134e919061442d565b506040805160608101825286815260208082018781528515801584860190815263ffffffff87166000908152609f8552868120955186559251600186015551600290940180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935560a09091529190912060001990556113d857609a8490555b6040805163ffffffff83168152602081018790529081018590527fa99ca06ac3461399088feac88ec48dc5a47d61c3b6839eab20146f2c4ee535849060600160405180910390a1505050505050505050565b6114326121cc565b61143c6000612233565b565b33600090815260a1602052604090205460ff1615156001146114c85760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c792066726175642070726f6f66207768697465206c6973742063616e2060448201527f6368616c6c656e6765206461746100000000000000000000000000000000000060648201526084016105a5565b6000848152609e602090815260408083208151608081018352815463ffffffff8082168352640100000000820481169583019590955268010000000000000000810490941692810192909252909160608301906c01000000000000000000000000900460ff16600281111561153f5761153f613f1c565b600281111561155057611550613f1c565b905250905060018160600151600281111561156d5761156d613f1c565b148015611583575042816040015163ffffffff16115b6115f55760405162461bcd60e51b815260206004820152602d60248201527f526f6c6c757053746f7265206d75737420626520636f6d6d697474656420616e60448201527f6420756e636f6e6669726d65640000000000000000000000000000000000000060648201526084016105a5565b8251611600906122aa565b6098546020850151604080870151606088015191517fed82c0ee00000000000000000000000000000000000000000000000000000000815260ff9093166004840152602483015263ffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091169063ed82c0ee9060640160206040518083038186803b15801561168c57600080fd5b505afa1580156116a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c491906144ae565b146117115760405162461bcd60e51b815260206004820152601e60248201527f6d6574616461746120707265696d61676520697320696e636f7272656374000060448201526064016105a5565b806020015163ffffffff1683600001516040015163ffffffff16146117c45760405162461bcd60e51b815260206004820152604260248201527f7365616368446174612773206461746173746f7265206964206973206e6f742060448201527f636f6e73697374656e74207769746820676976656e20726f6c6c75702073746f60648201527f7265000000000000000000000000000000000000000000000000000000000000608482015260a4016105a5565b6117ce8280614248565b6040516117dc9291906144c7565b6040519081900390208351511461185b5760405162461bcd60e51b815260206004820152603260248201527f646973636c6f737572652070726f6f667320686561646572686173682070726560448201527f696d61676520697320696e636f7272656374000000000000000000000000000060648201526084016105a5565b61189b6118688380614248565b61187860408601602087016140ef565b61188560408701876144d7565b61189260608901896144d7565b896080016123ca565b6118e75760405162461bcd60e51b815260206004820152601d60248201527f646973636c6f737572652070726f6f66732061726520696e76616c696400000060448201526064016105a5565b60006118fb6118f68480614248565b6129c2565b905063ffffffff811661191160408501856144d7565b905061192360408601602087016140ef565b63ffffffff1661193391906141cb565b11156119a75760405162461bcd60e51b815260206004820152602e60248201527f43616e206f6e6c792070726f766520646174612066726f6d207468652073797360448201527f74656d61746963206368756e6b7300000000000000000000000000000000000060648201526084016105a5565b60006119d96119b960408601866144d7565b886040518060800160405280606081526020016148bb60609139516106ce565b90506040518060800160405280606081526020016148bb6060913951815114611a905760405162461bcd60e51b815260206004820152604260248201527f50617273696e67206572726f722c2070726f76656e20737472696e672069732060448201527f646966666572656e74206c656e677468207468616e206672617564207374726960648201527f6e67000000000000000000000000000000000000000000000000000000000000608482015260a4016105a5565b6040518060800160405280606081526020016148bb6060913980519060200120818051906020012014611b055760405162461bcd60e51b815260206004820152601d60248201527f70726f76656e20737472696e6720213d20667261756420737472696e6700000060448201526064016105a5565b6000878152609e6020908152604080832080547fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff166c02000000000000000000000000179055875181015163ffffffff908116808552609f8452828520548a518401519092168552938290206001015482518c81529384019490945282820152606082019290925290517fca227c67a02028763083580d42e8bdef4bb49c393068d05983421cd7a4a2a5be9181900360800190a150505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff163314611c4f5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e20736574206c6174657360448201527f74206c3220626c6f636b206e756d62657200000000000000000000000000000060648201526084016105a5565b609a55565b60975473ffffffffffffffffffffffffffffffffffffffff163314611ce15760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520736560448201527f7175656e6365722061646472657373000000000000000000000000000000000060648201526084016105a5565b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611d4e604051806060016040528060008152602001600081526020016000151581525090565b5063ffffffff166000908152609f60209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b600054610100900460ff1615808015611db25750600054600160ff909116105b80611dcc5750303b158015611dcc575060005460ff166001145b611e3e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105a5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611e9c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b611ea46129d1565b6097805473ffffffffffffffffffffffffffffffffffffffff8089167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560988054928816929091169190911790556099849055609c839055609a829055609b8290558015611f7057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146120055760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520667260448201527f6175642070726f6f6620706572696f640000000000000000000000000000000060648201526084016105a5565b609c55565b6120126121cc565b73ffffffffffffffffffffffffffffffffffffffff811661209b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105a5565b6120a481612233565b50565b60975473ffffffffffffffffffffffffffffffffffffffff1633146121345760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520736560448201527f7175656e6365722061646472657373000000000000000000000000000000000060648201526084016105a5565b60005b609d54811015612187576000818152609e6020526040902080547fffffffffffffffffffffffffffffffffffffff000000000000000000000000001690558061217f816142ff565b915050612137565b50609d556001609a819055609b55565b60008284106121b3578183106121ad57816121c2565b826121c2565b8184106121c057816121c2565b835b90505b9392505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331461143c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105a5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080826000015183602001518460400151856060015186608001518760a001518860c0015160405160200161238d979695949392919096875260e095861b7fffffffff00000000000000000000000000000000000000000000000000000000908116602089015294861b851660248801529290941b909216602885015260a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016602c84015260609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166038830152604c820152606c0190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209392505050565b6000808567ffffffffffffffff8111156123e6576123e6613ca5565b60405190808252806020026020018201604052801561240f578160200160208202803683370190505b509050600061249c8b8b6040805160c08101825260006080820181815260a0830182905282526020820181905291810182905260608101919091525050604080518082018252823581526020838101358183015282516080810184529182528383013560e090811c918301919091526044840135811c92820192909252604890920135901c606082015290565b90508460005b8181101561277b57612572836124b8838e61453f565b8a8a858181106124ca576124ca614219565b90506020028101906124dc9190614567565b8b8b868181106124ee576124ee614219565b90506020028101906125009190614567565b6040018c8c8781811061251557612515614219565b90506020028101906125279190614567565b60800180360381019061253a91906145f5565b8d8d8881811061254c5761254c614219565b905060200281019061255e9190614567565b61256d90610100810190614248565b612a56565b6125e45760405162461bcd60e51b815260206004820152602260248201527f52657665616c206661696c65642064756520746f206e6f6e203120706169726960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016105a5565b8989828181106125f6576125f6614219565b90506020028101906126089190614248565b90508360200151602061261b9190614652565b65ffffffffffff16146126965760405162461bcd60e51b815260206004820152603860248201527f506f6c796e6f6d69616c206d757374206861766520612032353620626974206360448201527f6f656666696369656e7420666f722065616368207465726d000000000000000060648201526084016105a5565b8989828181106126a8576126a8614219565b90506020028101906126ba9190614248565b6040516126c89291906144c7565b60405180910390208888838181106126e2576126e2614219565b90506020028101906126f49190614567565b3589898481811061270757612707614219565b90506020028101906127199190614567565b60405161274093929160209081013591019283526020830191909152604082015260600190565b6040516020818303038152906040528051906020012084828151811061276857612768614219565b60209081029190910101526001016124a2565b5060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001846040516020016127b091906146b3565b6040516020818303038152906040528051906020012060001c6127d391906146bf565b90506127dd613a83565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018560006040516020016128129291906146d3565b6040516020818303038152906040528051906020012060001c61283591906146bf565b808252602082015260008989828161284f5761284f614219565b90506020028101906128619190614567565b61287190368190038101906146ec565b905060006128a38d8d600081811061288b5761288b614219565b905060200281019061289d9190614248565b86612c5e565b905060015b8a8110156129a0576128fa836128f58e8e858181106128c9576128c9614219565b90506020028101906128db9190614567565b6128eb90368190038101906146ec565b6020880151612d04565b612d9a565b9250600061292b8f8f8481811061291357612913614219565b90506020028101906129259190614248565b88612c5e565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828760016020020151098408602086015186519194507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001910960208601525080612998816142ff565b9150506128a8565b506129ad828a8684612e36565b97505050505050505098975050505050505050565b604482013560e01c5b92915050565b600054610100900460ff16612a4e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105a5565b61143c612fc5565b825160208082015191518186015180830151905160408051948501959095529383019190915260608201526080810191909152600090612b139060a00160405160208183030381529060405280519060200120612abc898b604001518c6060015161304b565b63ffffffff16612ad78b6020015165ffffffffffff166131b7565b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134b792505050565b612b5f5760405162461bcd60e51b815260206004820181905260248201527f496e636f7272656374207a65726f20706f6c79206d65726b6c652070726f6f6660448201526064016105a5565b8751600090612b7f906128f5612b7a368b90038b018b6146ec565b61362d565b604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d602083810191909152810191909152909150612c50612c48368990038901896146ec565b8784846136ec565b9a9950505050505050505050565b600080836001825b82811015612cf8576000888289612c7e8260206141cb565b92612c8b939291906142ad565b612c949161471e565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180848309860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018784099250612cf06020836141cb565b915050612c66565b50919695505050505050565b6040805180820190915260008082526020820152612d20613aa1565b83518152602080850151908201526040808201849052600090836060846007600019fa905080612d925760405162461bcd60e51b815260206004820152601060248201527f626e3235342d6d756c2d6661696c65640000000000000000000000000000000060448201526064016105a5565b505092915050565b6040805180820190915260008082526020820152612db6613abf565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa905080612d925760405162461bcd60e51b815260206004820152601060248201527f626e3235342d6164642d6661696c65640000000000000000000000000000000060448201526064016105a5565b60408051808201909152600181526002602082015260009081612e61612e5b8361362d565b86612d04565b604080518082019091527f220ac48bb1f91fd93f502a3d0caa077ac70e0af8819b9d8fa26a168a2c558a5781527f08f54b82af08ceaf7cd5f180bac94870f6d8100a9c9afa9dd09a4491653891126020820152909150612ec18183612d9a565b91506000612ed7612ed18561362d565b87612d04565b90506000612ee58a83612d9a565b604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d602083810191909152810191909152909150612fb685612faf368d90038d018d6145f5565b84846136ec565b9b9a5050505050505050505050565b600054610100900460ff166130425760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105a5565b61143c33612233565b600080613058838561453f565b9050600061306b8563ffffffff16613959565b90506000613079868461473c565b63ffffffff161561308b57600161308e565b60005b60ff1661309b878561475f565b6130a5919061453f565b905060006130c16130b68385614782565b63ffffffff16613959565b90508663ffffffff168863ffffffff16101561310357806130e2828a613986565b6130ee90610100614782565b6130f8919061475f565b9450505050506121c5565b61310d87846147a5565b61311790826147a5565b63ffffffff168863ffffffff16101561314957806130e2818561313a8b8d6147a5565b613144919061453f565b613986565b60405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420637265617465206e756d626572206f66206672616d6520686960448201527f67686572207468616e20706f737369626c65000000000000000000000000000060648201526084016105a5565b6000806131c3836139c5565b9050806131f257507fe82cea94884b1b895ea0742840a3b19249a723810fd1b04d8564d675b0a416f192915050565b806001141561322357507f4843774a80fc8385b31024f5bd18b42e62de439206ab9468d42d826796d41f6792915050565b806002141561325457507f092d3e5f87f5293e7ab0cc2ca6b0b5e4adb5e0011656544915f7cea34e69e5ab92915050565b806003141561328557507f494b208540ec8624fbbb3f2c64ffccdaf6253f8f4e50c0d93922d88195b0775592915050565b80600414156132b657507ffdb44b84a82893cfa0e37a97f09ffc4298ad5e62be1bea1d03320ae836213d2292915050565b80600514156132e757507f3f50cb08231d2a76853ba9dbb20dad45a1b75c57cdaff6223bfe069752cff3d492915050565b806006141561331857507fbb39eebd8138eefd5802a49d571e65b3e0d4e32277c28fbf5fbca66e7fb0431092915050565b806007141561334957507ff0a39b513e11fa80cbecbf352f69310eddd5cd03148768e0e9542bd600b133ec92915050565b806008141561337a57507f038cca2238865414efb752cc004fffec9e6069b709f495249cdf36efbd5952f692915050565b80600914156133ab57507f2a26b054ed559dd255d8ac9060ebf6b95b768d87de767f8174ad2f9a4e48dd0192915050565b80600a14156133dc57507f1fe180d0bc4ff7c69fefa595b3b5f3c284535a280f6fdcf69b20770d1e20e1fc92915050565b80600b141561340d57507f60e34ad57c61cd6fdd8177437c30e4a30334e63d7683989570cf27020efc820192915050565b80600c141561343e57507feda2417e770ddbe88f083acf06b6794dfb76301314a32bd0697440d76f6cd9cc92915050565b80600d141561346f57507f8cbe9b8cf92ce70e3bec8e1e72a0f85569017a7e43c3db50e4a5badb8dea7ce892915050565b60405162461bcd60e51b815260206004820152601660248201527f4c6f67206e6f7420696e2076616c69642072616e67650000000000000000000060448201526064016105a5565b6000602082516134c791906146bf565b156135145760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e67746800000000000000000000000060448201526064016105a5565b60006020835161352491906141b7565b90506135318160026148ae565b851061357f5760405162461bcd60e51b815260206004820152601560248201527f4c65616620696e64657820697320746f6f20626967000000000000000000000060448201526064016105a5565b60008660205b8551811161361f5785810151925061359e6002896146bf565b6135d3576040805160208101849052908101849052606001604051602081830303815290604052805190602001209150613600565b60408051602081018590529081018390526060016040516020818303038152906040528051906020012091505b61360b6002896141b7565b97506136186020826141cb565b9050613585565b509094149695505050505050565b6040805180820190915260008082526020820152815115801561365257506020820151155b15613670575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516136b591906146bf565b6136df907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47614202565b905292915050565b919050565b60408051808201825285815260208082018590528251808401909352858352820183905260009161371b613add565b60005b60028110156138e05760006137348260066141e3565b905084826002811061374857613748614219565b6020020151518361375a8360006141cb565b600c811061376a5761376a614219565b602002015284826002811061378157613781614219565b6020020151602001518382600161379891906141cb565b600c81106137a8576137a8614219565b60200201528382600281106137bf576137bf614219565b60200201515151836137d28360026141cb565b600c81106137e2576137e2614219565b60200201528382600281106137f9576137f9614219565b60200201515160016020020151836138128360036141cb565b600c811061382257613822614219565b602002015283826002811061383957613839614219565b60200201516020015160006002811061385457613854614219565b6020020151836138658360046141cb565b600c811061387557613875614219565b602002015283826002811061388c5761388c614219565b6020020151602001516001600281106138a7576138a7614219565b6020020151836138b88360056141cb565b600c81106138c8576138c8614219565b602002015250806138d8816142ff565b91505061371e565b506138e9613afc565b60006020826101808560086107d05a03fa9050806139495760405162461bcd60e51b815260206004820152601460248201527f626e3235342d70616972696e672d6661696c656400000000000000000000000060448201526064016105a5565b5051151598975050505050505050565b600060015b82816001901b101561397c5780613974816142ff565b91505061395e565b6001901b92915050565b6000806139988463ffffffff166139c5565b6139a39060206147a5565b90508063ffffffff166139b584613a35565b63ffffffff16901c949350505050565b6000808211613a165760405162461bcd60e51b815260206004820152601360248201527f4c6f67206d75737420626520646566696e65640000000000000000000000000060448201526064016105a5565b60005b600183821c146129cb5780613a2d816142ff565b915050613a19565b600080805b6020811015613a7c576001811b84811663ffffffff1615613a6957613a6082601f614202565b6001901b831792505b5080613a74816142ff565b915050613a3a565b5092915050565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146136e757600080fd5b600060208284031215613b5057600080fd5b6121c582613b1a565b60008060008060608587031215613b6f57600080fd5b843567ffffffffffffffff80821115613b8757600080fd5b818701915087601f830112613b9b57600080fd5b813581811115613baa57600080fd5b8860208260051b8501011115613bbf57600080fd5b6020928301999098509187013596604001359550909350505050565b60005b83811015613bf6578181015183820152602001613bde565b83811115613c05576000848401525b50505050565b6020815260008251806020840152613c2a816040850160208701613bdb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008083601f840112613c6e57600080fd5b50813567ffffffffffffffff811115613c8657600080fd5b602083019150836020828501011115613c9e57600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613cf757613cf7613ca5565b60405290565b60405160e0810167ffffffffffffffff81118282101715613cf757613cf7613ca5565b6040805190810167ffffffffffffffff81118282101715613cf757613cf7613ca5565b63ffffffff811681146120a457600080fd5b80356136e781613d43565b803560ff811681146136e757600080fd5b6000818303610140811215613d8557600080fd5b613d8d613cd4565b915060e0811215613d9d57600080fd5b50613da6613cfd565b823581526020830135613db881613d43565b60208201526040830135613dcb81613d43565b60408201526060830135613dde81613d43565b606082015260808301356bffffffffffffffffffffffff81168114613e0257600080fd5b6080820152613e1360a08401613b1a565b60a082015260c083810135908201528152613e3060e08301613d60565b60208201526101008201356040820152613e4d6101208301613d55565b606082015292915050565b803580151581146136e757600080fd5b600080600080600080600080610200898b031215613e8557600080fd5b883567ffffffffffffffff811115613e9c57600080fd5b613ea88b828c01613c5c565b9099509750613ebc90508a60208b01613d71565b9550610160890135945061018089013593506101a0890135613edd81613d43565b92506101c08901359150613ef46101e08a01613e58565b90509295985092959890939650565b600060208284031215613f1557600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613f82577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600060808201905063ffffffff808451168352806020850151166020840152806040850151166040840152506060830151613a7c6060840182613f4b565b63ffffffff858116825284811660208301528316604082015260808101613fee6060830184613f4b565b95945050505050565b60008060008060008060008060e0898b03121561401357600080fd5b883567ffffffffffffffff81111561402a57600080fd5b6140368b828c01613c5c565b9099509750614049905060208a01613d60565b9550604089013561405981613d43565b9450606089013593506080890135925060a089013561407781613d43565b9150613ef460c08a01613e58565b6000806000806101a0858703121561409c57600080fd5b84359350602085013592506140b48660408701613d71565b915061018085013567ffffffffffffffff8111156140d157600080fd5b850161010081880312156140e457600080fd5b939692955090935050565b60006020828403121561410157600080fd5b81356121c581613d43565b600080600080600060a0868803121561412457600080fd5b61412d86613b1a565b945061413b60208701613b1a565b94979496505050506040830135926060810135926080909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000826141c6576141c6614159565b500490565b600082198211156141de576141de614188565b500190565b60008160001904831182151516156141fd576141fd614188565b500290565b60008282101561421457614214614188565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261427d57600080fd5b83018035915067ffffffffffffffff82111561429857600080fd5b602001915036819003821315613c9e57600080fd5b600080858511156142bd57600080fd5b838611156142ca57600080fd5b5050820193919092039150565b600084516142e9818460208901613bdb565b8201838582376000930192835250909392505050565b600060001982141561431357614313614188565b5060010190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000610160808352614378818401868861431a565b915050825180516020840152602081015163ffffffff808216604086015280604084015116606086015280606084015116608086015250506bffffffffffffffffffffffff60808201511660a084015273ffffffffffffffffffffffffffffffffffffffff60a08201511660c084015260c081015160e084015250602083015161440861010084018260ff169052565b50604083015161012083015260609092015163ffffffff166101409091015292915050565b60006020828403121561443f57600080fd5b81516121c581613d43565b73ffffffffffffffffffffffffffffffffffffffff88811682528716602082015260ff8616604082015263ffffffff85811660608301528416608082015260c060a082018190526000906144a1908301848661431a565b9998505050505050505050565b6000602082840312156144c057600080fd5b5051919050565b8183823760009101908152919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261450c57600080fd5b83018035915067ffffffffffffffff82111561452757600080fd5b6020019150600581901b3603821315613c9e57600080fd5b600063ffffffff80831681851680830382111561455e5761455e614188565b01949350505050565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261459b57600080fd5b9190910192915050565b600082601f8301126145b657600080fd5b6145be613d20565b8060408401858111156145d057600080fd5b845b818110156145ea5780358452602093840193016145d2565b509095945050505050565b60006080828403121561460757600080fd5b6040516040810181811067ffffffffffffffff8211171561462a5761462a613ca5565b60405261463784846145a5565b815261464684604085016145a5565b60208201529392505050565b600065ffffffffffff8083168185168183048111821515161561467757614677614188565b02949350505050565b60008151602080840160005b838110156146a85781518752958201959082019060010161468c565b509495945050505050565b60006121c58284614680565b6000826146ce576146ce614159565b500690565b60006146df8285614680565b9283525050602001919050565b6000604082840312156146fe57600080fd5b614706613d20565b82358152602083013560208201528091505092915050565b803560208310156129cb57600019602084900360031b1b1692915050565b600063ffffffff8084168061475357614753614159565b92169190910692915050565b600063ffffffff8084168061477657614776614159565b92169190910492915050565b600063ffffffff8083168185168183048111821515161561467757614677614188565b600063ffffffff838116908316818110156147c2576147c2614188565b039392505050565b600181815b808511156148055781600019048211156147eb576147eb614188565b808516156147f857918102915b93841c93908002906147cf565b509250929050565b60008261481c575060016129cb565b81614829575060006129cb565b816001811461483f576002811461484957614865565b60019150506129cb565b60ff84111561485a5761485a614188565b50506001821b6129cb565b5060208310610133831016604e8410600b8410161715614888575081810a6129cb565b61489283836147ca565b80600019048211156148a6576148a6614188565b029392505050565b60006121c5838361480d56fe2d5f2860204f2060295f2d202d5f2860206f2060295f2d202d5f286020512060295f2d2042495444414f204a5553542052454b5420594f55207c5f2860204f2060295f7c202d207c5f2860206f2060295f7c202d207c5f286020512060295f7ca26469706673582212207026292d199ce0f63c773947674de2db22a74c54720515f75d50a8a060f2b39164736f6c63430008090033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"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\":\"uint256\",\"name\":\"reRollupIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rollupBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"ReRollupBatchData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rollupBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rollupBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreReverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BLOCK_STALE_MEASURE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRAUD_STRING\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"durationDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"globalDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"confirmer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreSearchData\",\"name\":\"searchData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"startL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"reConfirmedBatchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"name\":\"confirmData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dataManageAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"dataStoreIdToL2RollUpBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"dataStoreIdToRollupStoreNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fraudProofPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL2ConfirmedBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dataStoreId\",\"type\":\"uint32\"}],\"name\":\"getL2RollUpBlockByDataStoreId\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"internalType\":\"structBVM_EigenDataLayrChain.BatchRollupBlock\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL2StoredBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupBatchIndex\",\"type\":\"uint256\"}],\"name\":\"getRollupStoreByRollupBatchIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"confirmAt\",\"type\":\"uint32\"},{\"internalType\":\"enumBVM_EigenDataLayrChain.RollupStoreStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structBVM_EigenDataLayrChain.RollupStore\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_dataManageAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_reSubmitterAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_block_stale_measure\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fraudProofPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2SubmittedBlockNumber\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ConfirmedBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2StoredBlockNumber\",\"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\":\"bytes[]\",\"name\":\"polys\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"parse\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fraudulentStoreNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"durationDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"globalDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"confirmer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreSearchData\",\"name\":\"searchData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"firstChunkNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes[]\",\"name\":\"polys\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"interpolationPoly\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"revealProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"zeroPoly\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"zeroPolyProof\",\"type\":\"bytes\"}],\"internalType\":\"structDataLayrDisclosureLogic.MultiRevealProof[]\",\"name\":\"multiRevealProofs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"polyEquivalenceProof\",\"type\":\"tuple\"}],\"internalType\":\"structBVM_EigenDataLayrChain.DisclosureProofs\",\"name\":\"disclosureProofs\",\"type\":\"tuple\"}],\"name\":\"proveFraud\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"reRollupBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reRollupIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reSubmitterAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"removeFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupBatchIndex\",\"type\":\"uint256\"}],\"name\":\"resetRollupBatchData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rollupBatchIndexRollupStores\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"confirmAt\",\"type\":\"uint32\"},{\"internalType\":\"enumBVM_EigenDataLayrChain.RollupStoreStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"startL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"totalOperatorsIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"name\":\"storeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"submitReRollUpInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"unavailableFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dataManageAddress\",\"type\":\"address\"}],\"name\":\"updateDataLayrManagerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fraudProofPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFraudProofPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2ConfirmedBlockNumber\",\"type\":\"uint256\"}],\"name\":\"updateL2ConfirmedBlockNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2StoredBlockNumber\",\"type\":\"uint256\"}],\"name\":\"updateL2StoredBlockNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_reSubmitterAddress\",\"type\":\"address\"}],\"name\":\"updateReSubmitterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"updateSequencerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50614cee806100206000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c8063758b814711610160578063afab4ac5116100d8578063f24950291161008c578063f2fde38b11610071578063f2fde38b146105cc578063f7db9795146105df578063ff2e0749146105f257600080fd5b8063f2495029146105a3578063f2a8f124146105c357600080fd5b8063c8fff01b116100bd578063c8fff01b14610546578063c96c0d3814610559578063d7fbc2e21461059057600080fd5b8063afab4ac514610513578063b537c4c71461052657600080fd5b8063927f20321161012f5780639495de40116101145780639495de40146104e4578063990fca66146104f75780639a71e29c1461050057600080fd5b8063927f20321461048c57806392f30a451461049557600080fd5b8063758b8147146104335780637bd85879146104535780638bea6cae146104665780638da5cb5b1461046e57600080fd5b80633c762984116101f35780635d42ffb7116101c25780635e8b3f2d116101a75780635e8b3f2d1461040f578063715018a614610418578063728cdbca1461042057600080fd5b80635d42ffb7146103f35780635e4a3056146103fc57600080fd5b80633c7629841461033857806346b2eb9b1461034157806359cb6391146103495780635c1bba38146103ae57600080fd5b80632e260ac31161024a5780632e72866b1161022f5780632e72866b146102f3578063301b39ab1461031357806332c58f7a1461032557600080fd5b80632e260ac3146102cd5780632e64b4c0146102e057600080fd5b806302d777de1461027c578063060ee9a4146102915780630a33202e146102915780631f944c8f146102a4575b600080fd5b61028f61028a366004613eca565b610612565b005b61028f61029f366004613eca565b6106eb565b6102b76102b2366004613ee5565b6107c4565b6040516102c49190613f97565b60405180910390f35b61028f6102db3660046141f4565b61092d565b61028f6102ee36600461428f565b610fb6565b61030661030136600461428f565b611048565b6040516102c49190614312565b609b545b6040519081526020016102c4565b61028f610333366004613eca565b611101565b610317609e5481565b6102b76111dd565b61039e61035736600461428f565b60a06020526000908152604090205463ffffffff80821691640100000000810482169168010000000000000000820416906c01000000000000000000000000900460ff1684565b6040516102c49493929190614350565b6097546103ce9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b610317609c5481565b61028f61040a366004614383565b6111f9565b610317609a5481565b61028f61151c565b61028f61042e366004614411565b611530565b6099546103ce9073ffffffffffffffffffffffffffffffffffffffff1681565b61028f610461366004614470565b611725565b609c54610317565b60335473ffffffffffffffffffffffffffffffffffffffff166103ce565b610317609f5481565b6104c76104a33660046144da565b60a16020526000908152604090208054600182015460029092015490919060ff1683565b6040805193845260208401929092521515908201526060016102c4565b61028f6104f236600461428f565b611e9e565b610317609b5481565b61028f61050e36600461428f565b611f30565b61028f610521366004613eca565b6120f2565b6103176105343660046144da565b60a26020526000908152604090205481565b61028f610554366004613eca565b6121c6565b61056c6105673660046144da565b61229a565b604080518251815260208084015190820152918101511515908201526060016102c4565b61028f61059e36600461428f565b612304565b6098546103ce9073ffffffffffffffffffffffffffffffffffffffff1681565b610317609d5481565b61028f6105da366004613eca565b612396565b61028f6105ed36600461428f565b612433565b61031761060036600461428f565b60a46020526000908152604090205481565b60975473ffffffffffffffffffffffffffffffffffffffff1633146106a45760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520646c60448201527f736d20616464726573730000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b609880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60975473ffffffffffffffffffffffffffffffffffffffff1633146107785760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e2072656d6f766520667260448201527f6175642070726f6f662061646472657373000000000000000000000000000000606482015260840161069b565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a36020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6060806000845b8483511015610921576000610846826107e5602082614555565b6107f0906001614569565b6107fb906020614581565b61080591906145a0565b855161081190896145a0565b848c8c88818110610824576108246145b7565b905060200281019061083691906145e6565b6108419291506145a0565b612523565b90508389898581811061085b5761085b6145b7565b905060200281019061086d91906145e6565b84906108798583614569565b926108869392919061464b565b60405160200161089893929190614675565b6040516020818303038152906040529350835186116108b75750610921565b8888848181106108c9576108c96145b7565b90506020028101906108db91906145e6565b90506108e78284614569565b141561090357826108f78161469d565b9350506001915061091b565b61090e816001614569565b6109189083614569565b91505b506107cb565b50909695505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146109ba5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79207468652073657175656e6365722063616e2073746f72652064617460448201527f6100000000000000000000000000000000000000000000000000000000000000606482015260840161069b565b855160409081015163ffffffff16600090815260a16020522054851480156109fd5750855160409081015163ffffffff16600090815260a1602052206001015484145b8015610a2b5750855160409081015163ffffffff16600090815260a1602052206002015460ff161515811515145b610ac35760405162461bcd60e51b815260206004820152605560248201527f446174612073746f72652065697468657220776173206e6f7420696e6974696160448201527f6c697a65642062792074686520726f6c6c757020636f6e74726163742c206f7260648201527f20697320616c726561647920636f6e6669726d65640000000000000000000000608482015260a40161069b565b855160409081015163ffffffff16600090815260a2602052205460001914610b795760405162461bcd60e51b815260206004820152605560248201527f446174612073746f72652065697468657220776173206e6f7420696e6974696160448201527f6c697a65642062792074686520726f6c6c757020636f6e74726163742c206f7260648201527f20697320616c726561647920636f6e6669726d65640000000000000000000000608482015260a40161069b565b6098546040517f5189951500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690635189951590610bd3908b908b908b90600401614701565b600060405180830381600087803b158015610bed57600080fd5b505af1158015610c01573d6000803e3d6000fd5b5050505080610deb5760408051608081018252875182015163ffffffff90811682528851830151166020820152609d549091820190610c409042614569565b63ffffffff16815260200160019052609e54600090815260a0602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115610d5657610d566142a8565b02179055505050609c849055609e8054875160409081015163ffffffff16600090815260a26020529081208290557fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f6729290610db08361469d565b909155508751604090810151815163ffffffff93841681529216602083015281018790526060810186905260800160405180910390a1610fac565b60405180608001604052808463ffffffff16815260200187600001516040015163ffffffff168152602001609d5442610e249190614569565b63ffffffff16815260200160019052600083815260a0602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115610f3757610f376142a8565b021790555050865160409081015163ffffffff908116600090815260a260209081529083902086905589518301518351878152921690820152908101879052606081018690527fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f672915060800160405180910390a15b5050505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146110435760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e20736574206c6174657360448201527f74206c3220626c6f636b206e756d626572000000000000000000000000000000606482015260840161069b565b609c55565b6110706040805160808101825260008082526020820181905291810182905290606082015290565b600082815260a060209081526040918290208251608081018452815463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316938101939093529060608301906c01000000000000000000000000900460ff1660028111156110e7576110e76142a8565b60028111156110f8576110f86142a8565b90525092915050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461118e5760405162461bcd60e51b815260206004820152603a60248201527f4f6e6c79207468652073657175656e6365722063616e2073657420667261756460448201527f2070726f6f66206164647265737320756e617661696c61626c65000000000000606482015260840161069b565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a36020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b604051806080016040528060608152602001614c596060913981565b60975473ffffffffffffffffffffffffffffffffffffffff1633146112865760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79207468652073657175656e6365722063616e2073746f72652064617460448201527f6100000000000000000000000000000000000000000000000000000000000000606482015260840161069b565b609a5461129963ffffffff8716436145a0565b106112e65760405162461bcd60e51b815260206004820152601e60248201527f7374616b65732074616b656e2066726f6d20746f6f206c6f6e672061676f0000604482015260640161069b565b609854604080517f72d18e8d000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916372d18e8d916004808301926020929190829003018186803b15801561135157600080fd5b505afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138991906147cb565b9050609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf49ea733308a8a888f8f6040518863ffffffff1660e01b81526004016113f297969594939291906147e8565b602060405180830381600087803b15801561140c57600080fd5b505af1158015611420573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144491906147cb565b5060408051606081018252868152602080820187815285151583850190815263ffffffff8616600090815260a18452858120945185559151600185015551600290930180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169315159390931790925560a29052206000199055816114ca57609b8490555b6040805163ffffffff83168152602081018790529081018590527fa99ca06ac3461399088feac88ec48dc5a47d61c3b6839eab20146f2c4ee535849060600160405180910390a1505050505050505050565b611524612558565b61152e60006125bf565b565b600054610100900460ff16158080156115505750600054600160ff909116105b8061156a5750303b15801561156a575060005460ff166001145b6115dc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161069b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561163a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b611642612636565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609880548984169083161790556099805492881692909116919091179055609a849055609d839055609b829055609c829055801561171c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b50505050505050565b33600090815260a3602052604090205460ff1615156001146117af5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c792066726175642070726f6f66207768697465206c6973742063616e2060448201527f6368616c6c656e67652064617461000000000000000000000000000000000000606482015260840161069b565b600084815260a0602090815260408083208151608081018352815463ffffffff8082168352640100000000820481169583019590955268010000000000000000810490941692810192909252909160608301906c01000000000000000000000000900460ff166002811115611826576118266142a8565b6002811115611837576118376142a8565b9052509050600181606001516002811115611854576118546142a8565b14801561186a575042816040015163ffffffff16115b6118dc5760405162461bcd60e51b815260206004820152602d60248201527f526f6c6c757053746f7265206d75737420626520636f6d6d697474656420616e60448201527f6420756e636f6e6669726d656400000000000000000000000000000000000000606482015260840161069b565b82516118e7906126bb565b6098546020850151604080870151606088015191517fed82c0ee00000000000000000000000000000000000000000000000000000000815260ff9093166004840152602483015263ffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091169063ed82c0ee9060640160206040518083038186803b15801561197357600080fd5b505afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab919061484c565b146119f85760405162461bcd60e51b815260206004820152601e60248201527f6d6574616461746120707265696d61676520697320696e636f72726563740000604482015260640161069b565b806020015163ffffffff1683600001516040015163ffffffff1614611aab5760405162461bcd60e51b815260206004820152604260248201527f7365616368446174612773206461746173746f7265206964206973206e6f742060448201527f636f6e73697374656e74207769746820676976656e20726f6c6c75702073746f60648201527f7265000000000000000000000000000000000000000000000000000000000000608482015260a40161069b565b611ab582806145e6565b604051611ac3929190614865565b60405190819003902083515114611b425760405162461bcd60e51b815260206004820152603260248201527f646973636c6f737572652070726f6f667320686561646572686173682070726560448201527f696d61676520697320696e636f72726563740000000000000000000000000000606482015260840161069b565b611b82611b4f83806145e6565b611b5f60408601602087016144da565b611b6c6040870187614875565b611b796060890189614875565b896080016127db565b611bce5760405162461bcd60e51b815260206004820152601d60248201527f646973636c6f737572652070726f6f66732061726520696e76616c6964000000604482015260640161069b565b6000611be2611bdd84806145e6565b612dd3565b905063ffffffff8116611bf86040850185614875565b9050611c0a60408601602087016144da565b63ffffffff16611c1a9190614569565b1115611c8e5760405162461bcd60e51b815260206004820152602e60248201527f43616e206f6e6c792070726f766520646174612066726f6d207468652073797360448201527f74656d61746963206368756e6b73000000000000000000000000000000000000606482015260840161069b565b6000611cc0611ca06040860186614875565b88604051806080016040528060608152602001614c5960609139516107c4565b9050604051806080016040528060608152602001614c596060913951815114611d775760405162461bcd60e51b815260206004820152604260248201527f50617273696e67206572726f722c2070726f76656e20737472696e672069732060448201527f646966666572656e74206c656e677468207468616e206672617564207374726960648201527f6e67000000000000000000000000000000000000000000000000000000000000608482015260a40161069b565b604051806080016040528060608152602001614c596060913980519060200120818051906020012014611dec5760405162461bcd60e51b815260206004820152601d60248201527f70726f76656e20737472696e6720213d20667261756420737472696e67000000604482015260640161069b565b600087815260a06020908152604080832080547fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff166c02000000000000000000000000179055875181015163ffffffff90811680855260a18452828520548a518401519092168552938290206001015482518c8152938401949094529082015260608101919091527fca227c67a02028763083580d42e8bdef4bb49c393068d05983421cd7a4a2a5be90608001611713565b60975473ffffffffffffffffffffffffffffffffffffffff163314611f2b5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e20736574206c6174657360448201527f74206c3220626c6f636b206e756d626572000000000000000000000000000000606482015260840161069b565b609b55565b60995473ffffffffffffffffffffffffffffffffffffffff163314611fbd5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c7920746865207265207375626d69747465722063616e207375626d697460448201527f20726520726f6c6c757020646174610000000000000000000000000000000000606482015260840161069b565b600081815260a0602090815260408083208151608081018352815463ffffffff8082168352640100000000820481169583019590955268010000000000000000810490941692810192909252909160608301906c01000000000000000000000000900460ff166002811115612034576120346142a8565b6002811115612045576120456142a8565b905250602081015190915063ffffffff16156120ee57609f8054600090815260a46020526040812084905581547fee84ab0752d66e31e484f6855689d7067ecd900a6c5a198a2908f74e583e7d5792909161209f8361469d565b909155506020838101805163ffffffff908116600090815260a1845260408082205493519092168152819020600101548151948552928401879052830152606082015260800160405180910390a15b5050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461217f5760405162461bcd60e51b815260206004820152603260248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520726560448201527f207375626d697474657220616464726573730000000000000000000000000000606482015260840161069b565b609980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60975473ffffffffffffffffffffffffffffffffffffffff1633146122535760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520736560448201527f7175656e63657220616464726573730000000000000000000000000000000000606482015260840161069b565b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6122c0604051806060016040528060008152602001600081526020016000151581525090565b5063ffffffff16600090815260a160209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b60975473ffffffffffffffffffffffffffffffffffffffff1633146123915760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520667260448201527f6175642070726f6f6620706572696f6400000000000000000000000000000000606482015260840161069b565b609d55565b61239e612558565b73ffffffffffffffffffffffffffffffffffffffff81166124275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161069b565b612430816125bf565b50565b60975473ffffffffffffffffffffffffffffffffffffffff1633146124c05760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520736560448201527f7175656e63657220616464726573730000000000000000000000000000000000606482015260840161069b565b60005b609e5481101561251357600081815260a06020526040902080547fffffffffffffffffffffffffffffffffffffff000000000000000000000000001690558061250b8161469d565b9150506124c3565b50609e556001609b819055609c55565b600082841061253f57818310612539578161254e565b8261254e565b81841061254c578161254e565b835b90505b9392505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331461152e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161069b565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166126b35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161069b565b61152e612de2565b600080826000015183602001518460400151856060015186608001518760a001518860c0015160405160200161279e979695949392919096875260e095861b7fffffffff00000000000000000000000000000000000000000000000000000000908116602089015294861b851660248801529290941b909216602885015260a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016602c84015260609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166038830152604c820152606c0190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209392505050565b6000808567ffffffffffffffff8111156127f7576127f7614031565b604051908082528060200260200182016040528015612820578160200160208202803683370190505b50905060006128ad8b8b6040805160c08101825260006080820181815260a0830182905282526020820181905291810182905260608101919091525050604080518082018252823581526020838101358183015282516080810184529182528383013560e090811c918301919091526044840135811c92820192909252604890920135901c606082015290565b90508460005b81811015612b8c57612983836128c9838e6148dd565b8a8a858181106128db576128db6145b7565b90506020028101906128ed9190614905565b8b8b868181106128ff576128ff6145b7565b90506020028101906129119190614905565b6040018c8c87818110612926576129266145b7565b90506020028101906129389190614905565b60800180360381019061294b9190614993565b8d8d8881811061295d5761295d6145b7565b905060200281019061296f9190614905565b61297e906101008101906145e6565b612e68565b6129f55760405162461bcd60e51b815260206004820152602260248201527f52657665616c206661696c65642064756520746f206e6f6e203120706169726960448201527f6e67000000000000000000000000000000000000000000000000000000000000606482015260840161069b565b898982818110612a0757612a076145b7565b9050602002810190612a1991906145e6565b905083602001516020612a2c91906149f0565b65ffffffffffff1614612aa75760405162461bcd60e51b815260206004820152603860248201527f506f6c796e6f6d69616c206d757374206861766520612032353620626974206360448201527f6f656666696369656e7420666f722065616368207465726d0000000000000000606482015260840161069b565b898982818110612ab957612ab96145b7565b9050602002810190612acb91906145e6565b604051612ad9929190614865565b6040518091039020888883818110612af357612af36145b7565b9050602002810190612b059190614905565b35898984818110612b1857612b186145b7565b9050602002810190612b2a9190614905565b604051612b5193929160209081013591019283526020830191909152604082015260600190565b60405160208183030381529060405280519060200120848281518110612b7957612b796145b7565b60209081029190910101526001016128b3565b5060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184604051602001612bc19190614a51565b6040516020818303038152906040528051906020012060001c612be49190614a5d565b9050612bee613e0f565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001856000604051602001612c23929190614a71565b6040516020818303038152906040528051906020012060001c612c469190614a5d565b8082526020820152600089898281612c6057612c606145b7565b9050602002810190612c729190614905565b612c829036819003810190614a8a565b90506000612cb48d8d6000818110612c9c57612c9c6145b7565b9050602002810190612cae91906145e6565b86613070565b905060015b8a811015612db157612d0b83612d068e8e85818110612cda57612cda6145b7565b9050602002810190612cec9190614905565b612cfc9036819003810190614a8a565b6020880151613116565b6131ac565b92506000612d3c8f8f84818110612d2457612d246145b7565b9050602002810190612d3691906145e6565b88613070565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828760016020020151098408602086015186519194507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001910960208601525080612da98161469d565b915050612cb9565b50612dbe828a8684613248565b97505050505050505098975050505050505050565b604482013560e01c5b92915050565b600054610100900460ff16612e5f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161069b565b61152e336125bf565b825160208082015191518186015180830151905160408051948501959095529383019190915260608201526080810191909152600090612f259060a00160405160208183030381529060405280519060200120612ece898b604001518c606001516133d7565b63ffffffff16612ee98b6020015165ffffffffffff16613543565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061384392505050565b612f715760405162461bcd60e51b815260206004820181905260248201527f496e636f7272656374207a65726f20706f6c79206d65726b6c652070726f6f66604482015260640161069b565b8751600090612f9190612d06612f8c368b90038b018b614a8a565b6139b9565b604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290915061306261305a36899003890189614a8a565b878484613a78565b9a9950505050505050505050565b600080836001825b8281101561310a576000888289613090826020614569565b9261309d9392919061464b565b6130a691614abc565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180848309860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018784099250613102602083614569565b915050613078565b50919695505050505050565b6040805180820190915260008082526020820152613132613e2d565b83518152602080850151908201526040808201849052600090836060846007600019fa9050806131a45760405162461bcd60e51b815260206004820152601060248201527f626e3235342d6d756c2d6661696c656400000000000000000000000000000000604482015260640161069b565b505092915050565b60408051808201909152600080825260208201526131c8613e4b565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050806131a45760405162461bcd60e51b815260206004820152601060248201527f626e3235342d6164642d6661696c656400000000000000000000000000000000604482015260640161069b565b6040805180820190915260018152600260208201526000908161327361326d836139b9565b86613116565b604080518082019091527f220ac48bb1f91fd93f502a3d0caa077ac70e0af8819b9d8fa26a168a2c558a5781527f08f54b82af08ceaf7cd5f180bac94870f6d8100a9c9afa9dd09a44916538911260208201529091506132d381836131ac565b915060006132e96132e3856139b9565b87613116565b905060006132f78a836131ac565b604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d6020838101919091528101919091529091506133c8856133c1368d90038d018d614993565b8484613a78565b9b9a5050505050505050505050565b6000806133e483856148dd565b905060006133f78563ffffffff16613ce5565b905060006134058684614ada565b63ffffffff161561341757600161341a565b60005b60ff166134278785614afd565b61343191906148dd565b9050600061344d6134428385614b20565b63ffffffff16613ce5565b90508663ffffffff168863ffffffff16101561348f578061346e828a613d12565b61347a90610100614b20565b6134849190614afd565b945050505050612551565b6134998784614b43565b6134a39082614b43565b63ffffffff168863ffffffff1610156134d5578061346e81856134c68b8d614b43565b6134d091906148dd565b613d12565b60405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420637265617465206e756d626572206f66206672616d6520686960448201527f67686572207468616e20706f737369626c650000000000000000000000000000606482015260840161069b565b60008061354f83613d51565b90508061357e57507fe82cea94884b1b895ea0742840a3b19249a723810fd1b04d8564d675b0a416f192915050565b80600114156135af57507f4843774a80fc8385b31024f5bd18b42e62de439206ab9468d42d826796d41f6792915050565b80600214156135e057507f092d3e5f87f5293e7ab0cc2ca6b0b5e4adb5e0011656544915f7cea34e69e5ab92915050565b806003141561361157507f494b208540ec8624fbbb3f2c64ffccdaf6253f8f4e50c0d93922d88195b0775592915050565b806004141561364257507ffdb44b84a82893cfa0e37a97f09ffc4298ad5e62be1bea1d03320ae836213d2292915050565b806005141561367357507f3f50cb08231d2a76853ba9dbb20dad45a1b75c57cdaff6223bfe069752cff3d492915050565b80600614156136a457507fbb39eebd8138eefd5802a49d571e65b3e0d4e32277c28fbf5fbca66e7fb0431092915050565b80600714156136d557507ff0a39b513e11fa80cbecbf352f69310eddd5cd03148768e0e9542bd600b133ec92915050565b806008141561370657507f038cca2238865414efb752cc004fffec9e6069b709f495249cdf36efbd5952f692915050565b806009141561373757507f2a26b054ed559dd255d8ac9060ebf6b95b768d87de767f8174ad2f9a4e48dd0192915050565b80600a141561376857507f1fe180d0bc4ff7c69fefa595b3b5f3c284535a280f6fdcf69b20770d1e20e1fc92915050565b80600b141561379957507f60e34ad57c61cd6fdd8177437c30e4a30334e63d7683989570cf27020efc820192915050565b80600c14156137ca57507feda2417e770ddbe88f083acf06b6794dfb76301314a32bd0697440d76f6cd9cc92915050565b80600d14156137fb57507f8cbe9b8cf92ce70e3bec8e1e72a0f85569017a7e43c3db50e4a5badb8dea7ce892915050565b60405162461bcd60e51b815260206004820152601660248201527f4c6f67206e6f7420696e2076616c69642072616e676500000000000000000000604482015260640161069b565b6000602082516138539190614a5d565b156138a05760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e677468000000000000000000000000604482015260640161069b565b6000602083516138b09190614555565b90506138bd816002614c4c565b851061390b5760405162461bcd60e51b815260206004820152601560248201527f4c65616620696e64657820697320746f6f206269670000000000000000000000604482015260640161069b565b60008660205b855181116139ab5785810151925061392a600289614a5d565b61395f57604080516020810184905290810184905260600160405160208183030381529060405280519060200120915061398c565b60408051602081018590529081018390526060016040516020818303038152906040528051906020012091505b613997600289614555565b97506139a4602082614569565b9050613911565b509094149695505050505050565b604080518082019091526000808252602082015281511580156139de57506020820151155b156139fc575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478460200151613a419190614a5d565b613a6b907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476145a0565b905292915050565b919050565b604080518082018252858152602080820185905282518084019093528583528201839052600091613aa7613e69565b60005b6002811015613c6c576000613ac0826006614581565b9050848260028110613ad457613ad46145b7565b60200201515183613ae6836000614569565b600c8110613af657613af66145b7565b6020020152848260028110613b0d57613b0d6145b7565b60200201516020015183826001613b249190614569565b600c8110613b3457613b346145b7565b6020020152838260028110613b4b57613b4b6145b7565b6020020151515183613b5e836002614569565b600c8110613b6e57613b6e6145b7565b6020020152838260028110613b8557613b856145b7565b6020020151516001602002015183613b9e836003614569565b600c8110613bae57613bae6145b7565b6020020152838260028110613bc557613bc56145b7565b602002015160200151600060028110613be057613be06145b7565b602002015183613bf1836004614569565b600c8110613c0157613c016145b7565b6020020152838260028110613c1857613c186145b7565b602002015160200151600160028110613c3357613c336145b7565b602002015183613c44836005614569565b600c8110613c5457613c546145b7565b60200201525080613c648161469d565b915050613aaa565b50613c75613e88565b60006020826101808560086107d05a03fa905080613cd55760405162461bcd60e51b815260206004820152601460248201527f626e3235342d70616972696e672d6661696c6564000000000000000000000000604482015260640161069b565b5051151598975050505050505050565b600060015b82816001901b1015613d085780613d008161469d565b915050613cea565b6001901b92915050565b600080613d248463ffffffff16613d51565b613d2f906020614b43565b90508063ffffffff16613d4184613dc1565b63ffffffff16901c949350505050565b6000808211613da25760405162461bcd60e51b815260206004820152601360248201527f4c6f67206d75737420626520646566696e656400000000000000000000000000604482015260640161069b565b60005b600183821c14612ddc5780613db98161469d565b915050613da5565b600080805b6020811015613e08576001811b84811663ffffffff1615613df557613dec82601f6145a0565b6001901b831792505b5080613e008161469d565b915050613dc6565b5092915050565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114613a7357600080fd5b600060208284031215613edc57600080fd5b61255182613ea6565b60008060008060608587031215613efb57600080fd5b843567ffffffffffffffff80821115613f1357600080fd5b818701915087601f830112613f2757600080fd5b813581811115613f3657600080fd5b8860208260051b8501011115613f4b57600080fd5b6020928301999098509187013596604001359550909350505050565b60005b83811015613f82578181015183820152602001613f6a565b83811115613f91576000848401525b50505050565b6020815260008251806020840152613fb6816040850160208701613f67565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008083601f840112613ffa57600080fd5b50813567ffffffffffffffff81111561401257600080fd5b60208301915083602082850101111561402a57600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561408357614083614031565b60405290565b60405160e0810167ffffffffffffffff8111828210171561408357614083614031565b6040805190810167ffffffffffffffff8111828210171561408357614083614031565b63ffffffff8116811461243057600080fd5b8035613a73816140cf565b803560ff81168114613a7357600080fd5b600081830361014081121561411157600080fd5b614119614060565b915060e081121561412957600080fd5b50614132614089565b823581526020830135614144816140cf565b60208201526040830135614157816140cf565b6040820152606083013561416a816140cf565b606082015260808301356bffffffffffffffffffffffff8116811461418e57600080fd5b608082015261419f60a08401613ea6565b60a082015260c0838101359082015281526141bc60e083016140ec565b602082015261010082013560408201526141d961012083016140e1565b606082015292915050565b80358015158114613a7357600080fd5b600080600080600080600080610200898b03121561421157600080fd5b883567ffffffffffffffff81111561422857600080fd5b6142348b828c01613fe8565b909950975061424890508a60208b016140fd565b9550610160890135945061018089013593506101a0890135614269816140cf565b92506101c089013591506142806101e08a016141e4565b90509295985092959890939650565b6000602082840312156142a157600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061430e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600060808201905063ffffffff808451168352806020850151166020840152806040850151166040840152506060830151613e0860608401826142d7565b63ffffffff85811682528481166020830152831660408201526080810161437a60608301846142d7565b95945050505050565b60008060008060008060008060e0898b03121561439f57600080fd5b883567ffffffffffffffff8111156143b657600080fd5b6143c28b828c01613fe8565b90995097506143d5905060208a016140ec565b955060408901356143e5816140cf565b9450606089013593506080890135925060a0890135614403816140cf565b915061428060c08a016141e4565b60008060008060008060c0878903121561442a57600080fd5b61443387613ea6565b955061444160208801613ea6565b945061444f60408801613ea6565b9350606087013592506080870135915060a087013590509295509295509295565b6000806000806101a0858703121561448757600080fd5b843593506020850135925061449f86604087016140fd565b915061018085013567ffffffffffffffff8111156144bc57600080fd5b850161010081880312156144cf57600080fd5b939692955090935050565b6000602082840312156144ec57600080fd5b8135612551816140cf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082614564576145646144f7565b500490565b6000821982111561457c5761457c614526565b500190565b600081600019048311821515161561459b5761459b614526565b500290565b6000828210156145b2576145b2614526565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261461b57600080fd5b83018035915067ffffffffffffffff82111561463657600080fd5b60200191503681900382131561402a57600080fd5b6000808585111561465b57600080fd5b8386111561466857600080fd5b5050820193919092039150565b60008451614687818460208901613f67565b8201838582376000930192835250909392505050565b60006000198214156146b1576146b1614526565b5060010190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061016080835261471681840186886146b8565b915050825180516020840152602081015163ffffffff808216604086015280604084015116606086015280606084015116608086015250506bffffffffffffffffffffffff60808201511660a084015273ffffffffffffffffffffffffffffffffffffffff60a08201511660c084015260c081015160e08401525060208301516147a661010084018260ff169052565b50604083015161012083015260609092015163ffffffff166101409091015292915050565b6000602082840312156147dd57600080fd5b8151612551816140cf565b73ffffffffffffffffffffffffffffffffffffffff88811682528716602082015260ff8616604082015263ffffffff85811660608301528416608082015260c060a0820181905260009061483f90830184866146b8565b9998505050505050505050565b60006020828403121561485e57600080fd5b5051919050565b8183823760009101908152919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126148aa57600080fd5b83018035915067ffffffffffffffff8211156148c557600080fd5b6020019150600581901b360382131561402a57600080fd5b600063ffffffff8083168185168083038211156148fc576148fc614526565b01949350505050565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261493957600080fd5b9190910192915050565b600082601f83011261495457600080fd5b61495c6140ac565b80604084018581111561496e57600080fd5b845b81811015614988578035845260209384019301614970565b509095945050505050565b6000608082840312156149a557600080fd5b6040516040810181811067ffffffffffffffff821117156149c8576149c8614031565b6040526149d58484614943565b81526149e48460408501614943565b60208201529392505050565b600065ffffffffffff80831681851681830481118215151615614a1557614a15614526565b02949350505050565b60008151602080840160005b83811015614a4657815187529582019590820190600101614a2a565b509495945050505050565b60006125518284614a1e565b600082614a6c57614a6c6144f7565b500690565b6000614a7d8285614a1e565b9283525050602001919050565b600060408284031215614a9c57600080fd5b614aa46140ac565b82358152602083013560208201528091505092915050565b80356020831015612ddc57600019602084900360031b1b1692915050565b600063ffffffff80841680614af157614af16144f7565b92169190910692915050565b600063ffffffff80841680614b1457614b146144f7565b92169190910492915050565b600063ffffffff80831681851681830481118215151615614a1557614a15614526565b600063ffffffff83811690831681811015614b6057614b60614526565b039392505050565b600181815b80851115614ba3578160001904821115614b8957614b89614526565b80851615614b9657918102915b93841c9390800290614b6d565b509250929050565b600082614bba57506001612ddc565b81614bc757506000612ddc565b8160018114614bdd5760028114614be757614c03565b6001915050612ddc565b60ff841115614bf857614bf8614526565b50506001821b612ddc565b5060208310610133831016604e8410600b8410161715614c26575081810a612ddc565b614c308383614b68565b8060001904821115614c4457614c44614526565b029392505050565b60006125518383614bab56fe2d5f2860204f2060295f2d202d5f2860206f2060295f2d202d5f286020512060295f2d2042495444414f204a5553542052454b5420594f55207c5f2860204f2060295f7c202d207c5f2860206f2060295f7c202d207c5f286020512060295f7ca2646970667358221220a99efba100aeb28adad0e84bd581723a0a37fd2e79efeac682d769d7fc327d6964736f6c63430008090033", } // BVMEigenDataLayrChainABI is the input ABI used to generate the binding from. @@ -686,6 +686,99 @@ func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) Owner() (commo return _BVMEigenDataLayrChain.Contract.Owner(&_BVMEigenDataLayrChain.CallOpts) } +// ReRollupBatchIndex is a free data retrieval call binding the contract method 0xff2e0749. +// +// Solidity: function reRollupBatchIndex(uint256 ) view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) ReRollupBatchIndex(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "reRollupBatchIndex", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ReRollupBatchIndex is a free data retrieval call binding the contract method 0xff2e0749. +// +// Solidity: function reRollupBatchIndex(uint256 ) view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) ReRollupBatchIndex(arg0 *big.Int) (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.ReRollupBatchIndex(&_BVMEigenDataLayrChain.CallOpts, arg0) +} + +// ReRollupBatchIndex is a free data retrieval call binding the contract method 0xff2e0749. +// +// Solidity: function reRollupBatchIndex(uint256 ) view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) ReRollupBatchIndex(arg0 *big.Int) (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.ReRollupBatchIndex(&_BVMEigenDataLayrChain.CallOpts, arg0) +} + +// ReRollupIndex is a free data retrieval call binding the contract method 0x927f2032. +// +// Solidity: function reRollupIndex() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) ReRollupIndex(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "reRollupIndex") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ReRollupIndex is a free data retrieval call binding the contract method 0x927f2032. +// +// Solidity: function reRollupIndex() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) ReRollupIndex() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.ReRollupIndex(&_BVMEigenDataLayrChain.CallOpts) +} + +// ReRollupIndex is a free data retrieval call binding the contract method 0x927f2032. +// +// Solidity: function reRollupIndex() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) ReRollupIndex() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.ReRollupIndex(&_BVMEigenDataLayrChain.CallOpts) +} + +// ReSubmitterAddress is a free data retrieval call binding the contract method 0x758b8147. +// +// Solidity: function reSubmitterAddress() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) ReSubmitterAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "reSubmitterAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ReSubmitterAddress is a free data retrieval call binding the contract method 0x758b8147. +// +// Solidity: function reSubmitterAddress() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) ReSubmitterAddress() (common.Address, error) { + return _BVMEigenDataLayrChain.Contract.ReSubmitterAddress(&_BVMEigenDataLayrChain.CallOpts) +} + +// ReSubmitterAddress is a free data retrieval call binding the contract method 0x758b8147. +// +// Solidity: function reSubmitterAddress() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) ReSubmitterAddress() (common.Address, error) { + return _BVMEigenDataLayrChain.Contract.ReSubmitterAddress(&_BVMEigenDataLayrChain.CallOpts) +} + // RollupBatchIndex is a free data retrieval call binding the contract method 0x3c762984. // // Solidity: function rollupBatchIndex() view returns(uint256) @@ -824,25 +917,25 @@ func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) ConfirmDat return _BVMEigenDataLayrChain.Contract.ConfirmData(&_BVMEigenDataLayrChain.TransactOpts, data, searchData, startL2Block, endL2Block, originDataStoreId, reConfirmedBatchIndex, isReRollup) } -// Initialize is a paid mutator transaction binding the contract method 0xd13f90b4. +// Initialize is a paid mutator transaction binding the contract method 0x728cdbca. // -// Solidity: function initialize(address _sequencer, address _dataManageAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() -func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) Initialize(opts *bind.TransactOpts, _sequencer common.Address, _dataManageAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { - return _BVMEigenDataLayrChain.contract.Transact(opts, "initialize", _sequencer, _dataManageAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) +// Solidity: function initialize(address _sequencer, address _dataManageAddress, address _reSubmitterAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) Initialize(opts *bind.TransactOpts, _sequencer common.Address, _dataManageAddress common.Address, _reSubmitterAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "initialize", _sequencer, _dataManageAddress, _reSubmitterAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) } -// Initialize is a paid mutator transaction binding the contract method 0xd13f90b4. +// Initialize is a paid mutator transaction binding the contract method 0x728cdbca. // -// Solidity: function initialize(address _sequencer, address _dataManageAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() -func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) Initialize(_sequencer common.Address, _dataManageAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { - return _BVMEigenDataLayrChain.Contract.Initialize(&_BVMEigenDataLayrChain.TransactOpts, _sequencer, _dataManageAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) +// Solidity: function initialize(address _sequencer, address _dataManageAddress, address _reSubmitterAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) Initialize(_sequencer common.Address, _dataManageAddress common.Address, _reSubmitterAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.Initialize(&_BVMEigenDataLayrChain.TransactOpts, _sequencer, _dataManageAddress, _reSubmitterAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) } -// Initialize is a paid mutator transaction binding the contract method 0xd13f90b4. +// Initialize is a paid mutator transaction binding the contract method 0x728cdbca. // -// Solidity: function initialize(address _sequencer, address _dataManageAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() -func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) Initialize(_sequencer common.Address, _dataManageAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { - return _BVMEigenDataLayrChain.Contract.Initialize(&_BVMEigenDataLayrChain.TransactOpts, _sequencer, _dataManageAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) +// Solidity: function initialize(address _sequencer, address _dataManageAddress, address _reSubmitterAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) Initialize(_sequencer common.Address, _dataManageAddress common.Address, _reSubmitterAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.Initialize(&_BVMEigenDataLayrChain.TransactOpts, _sequencer, _dataManageAddress, _reSubmitterAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) } // Parse is a paid mutator transaction binding the contract method 0x1f944c8f. @@ -992,6 +1085,27 @@ func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) StoreData( return _BVMEigenDataLayrChain.Contract.StoreData(&_BVMEigenDataLayrChain.TransactOpts, header, duration, blockNumber, startL2Block, endL2Block, totalOperatorsIndex, isReRollup) } +// SubmitReRollUpInfo is a paid mutator transaction binding the contract method 0x9a71e29c. +// +// Solidity: function submitReRollUpInfo(uint256 batchIndex) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) SubmitReRollUpInfo(opts *bind.TransactOpts, batchIndex *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "submitReRollUpInfo", batchIndex) +} + +// SubmitReRollUpInfo is a paid mutator transaction binding the contract method 0x9a71e29c. +// +// Solidity: function submitReRollUpInfo(uint256 batchIndex) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) SubmitReRollUpInfo(batchIndex *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.SubmitReRollUpInfo(&_BVMEigenDataLayrChain.TransactOpts, batchIndex) +} + +// SubmitReRollUpInfo is a paid mutator transaction binding the contract method 0x9a71e29c. +// +// Solidity: function submitReRollUpInfo(uint256 batchIndex) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) SubmitReRollUpInfo(batchIndex *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.SubmitReRollUpInfo(&_BVMEigenDataLayrChain.TransactOpts, batchIndex) +} + // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // // Solidity: function transferOwnership(address newOwner) returns() @@ -1118,6 +1232,27 @@ func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) UpdateL2St return _BVMEigenDataLayrChain.Contract.UpdateL2StoredBlockNumber(&_BVMEigenDataLayrChain.TransactOpts, _l2StoredBlockNumber) } +// UpdateReSubmitterAddress is a paid mutator transaction binding the contract method 0xafab4ac5. +// +// Solidity: function updateReSubmitterAddress(address _reSubmitterAddress) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) UpdateReSubmitterAddress(opts *bind.TransactOpts, _reSubmitterAddress common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "updateReSubmitterAddress", _reSubmitterAddress) +} + +// UpdateReSubmitterAddress is a paid mutator transaction binding the contract method 0xafab4ac5. +// +// Solidity: function updateReSubmitterAddress(address _reSubmitterAddress) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) UpdateReSubmitterAddress(_reSubmitterAddress common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateReSubmitterAddress(&_BVMEigenDataLayrChain.TransactOpts, _reSubmitterAddress) +} + +// UpdateReSubmitterAddress is a paid mutator transaction binding the contract method 0xafab4ac5. +// +// Solidity: function updateReSubmitterAddress(address _reSubmitterAddress) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) UpdateReSubmitterAddress(_reSubmitterAddress common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateReSubmitterAddress(&_BVMEigenDataLayrChain.TransactOpts, _reSubmitterAddress) +} + // UpdateSequencerAddress is a paid mutator transaction binding the contract method 0xc8fff01b. // // Solidity: function updateSequencerAddress(address _sequencer) returns() @@ -1426,6 +1561,143 @@ func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) ParseOwnershipTrans return event, nil } +// BVMEigenDataLayrChainReRollupBatchDataIterator is returned from FilterReRollupBatchData and is used to iterate over the raw logs and unpacked data for ReRollupBatchData events raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainReRollupBatchDataIterator struct { + Event *BVMEigenDataLayrChainReRollupBatchData // 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 *BVMEigenDataLayrChainReRollupBatchDataIterator) 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(BVMEigenDataLayrChainReRollupBatchData) + 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(BVMEigenDataLayrChainReRollupBatchData) + 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 *BVMEigenDataLayrChainReRollupBatchDataIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BVMEigenDataLayrChainReRollupBatchDataIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BVMEigenDataLayrChainReRollupBatchData represents a ReRollupBatchData event raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainReRollupBatchData struct { + ReRollupIndex *big.Int + RollupBatchIndex *big.Int + StratL2BlockNumber *big.Int + EndL2BlockNumber *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReRollupBatchData is a free log retrieval operation binding the contract event 0xee84ab0752d66e31e484f6855689d7067ecd900a6c5a198a2908f74e583e7d57. +// +// Solidity: event ReRollupBatchData(uint256 reRollupIndex, uint256 rollupBatchIndex, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) FilterReRollupBatchData(opts *bind.FilterOpts) (*BVMEigenDataLayrChainReRollupBatchDataIterator, error) { + + logs, sub, err := _BVMEigenDataLayrChain.contract.FilterLogs(opts, "ReRollupBatchData") + if err != nil { + return nil, err + } + return &BVMEigenDataLayrChainReRollupBatchDataIterator{contract: _BVMEigenDataLayrChain.contract, event: "ReRollupBatchData", logs: logs, sub: sub}, nil +} + +// WatchReRollupBatchData is a free log subscription operation binding the contract event 0xee84ab0752d66e31e484f6855689d7067ecd900a6c5a198a2908f74e583e7d57. +// +// Solidity: event ReRollupBatchData(uint256 reRollupIndex, uint256 rollupBatchIndex, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) WatchReRollupBatchData(opts *bind.WatchOpts, sink chan<- *BVMEigenDataLayrChainReRollupBatchData) (event.Subscription, error) { + + logs, sub, err := _BVMEigenDataLayrChain.contract.WatchLogs(opts, "ReRollupBatchData") + 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(BVMEigenDataLayrChainReRollupBatchData) + if err := _BVMEigenDataLayrChain.contract.UnpackLog(event, "ReRollupBatchData", 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 +} + +// ParseReRollupBatchData is a log parse operation binding the contract event 0xee84ab0752d66e31e484f6855689d7067ecd900a6c5a198a2908f74e583e7d57. +// +// Solidity: event ReRollupBatchData(uint256 reRollupIndex, uint256 rollupBatchIndex, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) ParseReRollupBatchData(log types.Log) (*BVMEigenDataLayrChainReRollupBatchData, error) { + event := new(BVMEigenDataLayrChainReRollupBatchData) + if err := _BVMEigenDataLayrChain.contract.UnpackLog(event, "ReRollupBatchData", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // BVMEigenDataLayrChainRollupStoreConfirmedIterator is returned from FilterRollupStoreConfirmed and is used to iterate over the raw logs and unpacked data for RollupStoreConfirmed events raised by the BVMEigenDataLayrChain contract. type BVMEigenDataLayrChainRollupStoreConfirmedIterator struct { Event *BVMEigenDataLayrChainRollupStoreConfirmed // Event containing the contract specifics and raw log diff --git a/mt-batcher/config.go b/mt-batcher/config.go index be40a15cf..1ac5992d6 100644 --- a/mt-batcher/config.go +++ b/mt-batcher/config.go @@ -12,6 +12,7 @@ type Config struct { MtlNetworkName string L1EthRpc string L2MtlRpc string + DtlClientUrl string DisperserEndpoint string RetrieverSocket string EigenDaHttpPort int @@ -57,6 +58,7 @@ func NewConfig(ctx *cli.Context) (Config, error) { MtlNetworkName: ctx.GlobalString(flags.MtlNetworkNameFlag.Name), L1EthRpc: ctx.GlobalString(flags.L1EthRpcFlag.Name), L2MtlRpc: ctx.GlobalString(flags.L2MtlRpcFlag.Name), + DtlClientUrl: ctx.GlobalString(flags.DtlClientUrlFlag.Name), DisperserEndpoint: ctx.GlobalString(flags.DisperserEndpointFlag.Name), RetrieverSocket: ctx.GlobalString(flags.RetrieverSocketFlag.Name), EigenDaHttpPort: ctx.GlobalInt(flags.EigenDaHttpPortFlag.Name), diff --git a/mt-batcher/flags/flags.go b/mt-batcher/flags/flags.go index 025a58493..4fb0c13f0 100644 --- a/mt-batcher/flags/flags.go +++ b/mt-batcher/flags/flags.go @@ -37,6 +37,12 @@ var ( Required: true, EnvVar: prefixEnvVar(envVarPrefix, "L2_MTL_RPC"), } + DtlClientUrlFlag = cli.StringFlag{ + Name: "dtl-client-url", + Usage: "HTTP provider URL for dtl client", + Required: true, + EnvVar: prefixEnvVar(envVarPrefix, "DTL_CLIENT_URL"), + } DisperserEndpointFlag = cli.StringFlag{ Name: "disperser", Usage: "Endpoint at which disperser is available", @@ -252,6 +258,7 @@ var requiredFlags = []cli.Flag{ MtlNetworkNameFlag, L1EthRpcFlag, L2MtlRpcFlag, + DtlClientUrlFlag, DisperserEndpointFlag, RetrieverSocketFlag, EigenDaHttpPortFlag, diff --git a/mt-batcher/go.mod b/mt-batcher/go.mod index 63338a06f..aab773776 100644 --- a/mt-batcher/go.mod +++ b/mt-batcher/go.mod @@ -9,26 +9,28 @@ replace github.com/Layr-Labs/datalayr/lib/merkzg => ../datalayr-mantle/lib/merkz replace github.com/mantlenetworkio/mantle/l2geth v0.0.0 => ../l2geth require ( - github.com/Layr-Labs/datalayr/common v0.0.0-00010101000000-000000000000 + // github.com/Layr-Labs/datalayr/common v0.0.0-00010101000000-000000000000 github.com/ethereum/go-ethereum v1.10.26 + github.com/go-resty/resty/v2 v2.7.0 github.com/mantlenetworkio/mantle/l2geth v0.0.0 github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.8.1 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 - github.com/urfave/cli v1.22.10 + github.com/urfave/cli v1.22.12 google.golang.org/grpc v1.49.0 ) require ( - // github.com/Layr-Labs/datalayr/common v0.0.0-00010101000000-000000000000 github.com/decred/dcrd/hdkeychain/v3 v3.0.0 github.com/labstack/echo/v4 v4.9.0 - github.com/prometheus/client_golang v1.11.0 + github.com/prometheus/client_golang v1.14.0 github.com/tyler-smith/go-bip39 v1.1.0 ) -//github.com/Layr-Labs/datalayr/common v0.0.0-00010101000000-000000000000 -require github.com/shurcooL/graphql v0.0.0-20220606043923-3cf50f8a0a29 +require ( + github.com/Layr-Labs/datalayr/common v0.0.0-00010101000000-000000000000 + github.com/shurcooL/graphql v0.0.0-20220606043923-3cf50f8a0a29 +) require ( github.com/Layr-Labs/datalayr/lib/merkzg v0.0.0-00010101000000-000000000000 // indirect @@ -48,49 +50,64 @@ require ( github.com/decred/dcrd/crypto/ripemd160 v1.0.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v3 v3.0.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect + github.com/edsrzf/mmap-go v1.1.0 // indirect github.com/elastic/gosigar v0.14.2 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect + github.com/go-kit/kit v0.12.0 // indirect github.com/go-ole/go-ole v1.2.6 // indirect - github.com/go-resty/resty/v2 v2.7.0 // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/golang/snappy v0.0.4 // indirect + github.com/google/go-cmp v0.5.9 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/uint256 v1.2.0 // indirect + github.com/huin/goupnp v1.0.3 // indirect + github.com/jackpal/go-nat-pmp v1.0.2 // indirect + github.com/kr/pretty v0.3.0 // indirect github.com/labstack/gommon v0.3.1 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.16 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/onsi/ginkgo/v2 v2.5.1 // indirect + github.com/onsi/gomega v1.24.0 // indirect + github.com/pborman/uuid v1.2.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.30.0 // indirect - github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect github.com/prometheus/tsdb v0.10.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/rjeczalik/notify v0.9.2 // indirect + github.com/rogpeppe/go-internal v1.8.1 // indirect github.com/rs/cors v1.8.2 // indirect github.com/rs/zerolog v1.27.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect + github.com/status-im/keycard-go v0.0.0-20211109104530-b0e0482ba91d // indirect github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 // indirect github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 // indirect github.com/tklauser/go-sysconf v0.3.10 // indirect github.com/tklauser/numcpus v0.4.0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.1 // indirect + github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect golang.org/x/crypto v0.3.0 // indirect golang.org/x/net v0.3.0 // indirect + golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.3.0 // indirect golang.org/x/text v0.5.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 // indirect + google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/mt-batcher/go.sum b/mt-batcher/go.sum index 0e6aba274..48afe5829 100644 --- a/mt-batcher/go.sum +++ b/mt-batcher/go.sum @@ -54,6 +54,7 @@ github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6L github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= @@ -241,8 +242,9 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= @@ -257,13 +259,18 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= +github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= @@ -339,8 +346,9 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -429,6 +437,7 @@ github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1: github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jarcoal/httpmock v1.0.8 h1:8kI16SoO6LQKgPE7PvQuV+YuD/inwHd7fOOe2zMbo4k= github.com/jarcoal/httpmock v1.0.8/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -444,6 +453,7 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= @@ -467,8 +477,9 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -516,8 +527,9 @@ github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4 github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -526,8 +538,9 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= @@ -537,6 +550,7 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -564,13 +578,15 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.2.0 h1:3ZNA3L1c5FYDFTTxbFeVGGD8jYvjYauHD30YgLxVsNI= +github.com/onsi/ginkgo/v2 v2.5.1 h1:auzK7OI497k6x4OvWq+TKAcpcSAlod0doAH72oIN0Jw= +github.com/onsi/ginkgo/v2 v2.5.1/go.mod h1:63DOGlLAH8+REH8jUGdL3YpCpu7JODesutUjdENfUAc= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/onsi/gomega v1.24.0 h1:+0glovB9Jd6z3VR+ScSwQqXVTIfJcGA9UBM8yzQxhqg= +github.com/onsi/gomega v1.24.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= @@ -585,6 +601,7 @@ github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnh github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= @@ -592,6 +609,7 @@ github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssy github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -606,15 +624,18 @@ github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -622,16 +643,18 @@ github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.30.0 h1:JEkYlQnpzrzQFxi6gnukFPdQ+ac82oRhzMcIduJu/Ug= -github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic= github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4= @@ -647,6 +670,9 @@ github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff/go.mod h1:xvqspo github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -720,8 +746,8 @@ github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2n github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.10 h1:p8Fspmz3iTctJstry1PYS3HVdllxnEzTEsgIgtxTrCk= -github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.12 h1:igJgVw1JdKH+trcLWLeLwZjU9fEfPesQ+9/e4MQ44S8= +github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= @@ -730,6 +756,7 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 h1:1cngl9mPEoITZG8s8cVcUy5CeIBYhEESkOB7m6Gmkrk= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= @@ -738,7 +765,6 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -805,7 +831,6 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -865,6 +890,8 @@ golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.3.0 h1:VWL6FNY2bEEmsGVKabSlHu5Irp34xmMRoqb/9lF9lxk= golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -873,6 +900,7 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -884,7 +912,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -955,8 +984,10 @@ golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1036,7 +1067,6 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1104,8 +1134,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 h1:ysnBoUyeL/H6RCvNRhWHjKoDEmguI+mPU+qHgK8qv/w= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= diff --git a/mt-batcher/mt_batcher.go b/mt-batcher/mt_batcher.go index 8ea9f8762..11addc6a1 100644 --- a/mt-batcher/mt_batcher.go +++ b/mt-batcher/mt_batcher.go @@ -128,6 +128,7 @@ func NewMantleBatch(cfg Config) (*MantleBatch, error) { driverConfig := &sequencer.DriverConfig{ L1Client: l1Client, L2Client: l2Client, + DtlClientUrl: cfg.DtlClientUrl, EigenDaContract: eigenContract, RawEigenContract: rawEigenContract, EigenABI: eignenABI, diff --git a/mt-batcher/services/client/client.go b/mt-batcher/services/client/client.go new file mode 100644 index 000000000..343846ee5 --- /dev/null +++ b/mt-batcher/services/client/client.go @@ -0,0 +1,57 @@ +package client + +import ( + "errors" + "fmt" + "github.com/go-resty/resty/v2" + "github.com/mantlenetworkio/mantle/l2geth/rollup" + "strconv" +) + +var errDtlHTTPError = errors.New("dtl http error") + +type DtlClient interface { + GetEnqueueByIndex(index uint64) (string, error) +} + +type Client struct { + client *resty.Client +} + +func NewDtlClient(url string) *Client { + client := resty.New() + client.SetHostURL(url) + client.OnAfterResponse(func(c *resty.Client, r *resty.Response) error { + statusCode := r.StatusCode() + if statusCode >= 400 { + method := r.Request.Method + url := r.Request.URL + return fmt.Errorf("%d cannot %s %s: %w", statusCode, method, url, errDtlHTTPError) + } + return nil + }) + return &Client{ + client: client, + } +} + +func (c *Client) GetEnqueueByIndex(index uint64) (string, error) { + str := strconv.FormatUint(index, 10) + response, err := c.client.R(). + SetPathParams(map[string]string{ + "index": str, + }). + SetResult(&rollup.Enqueue{}). + Get("/enqueue/index/{index}") + if err != nil { + return "", fmt.Errorf("cannot fetch enqueue: %w", err) + } + enqueue, ok := response.Result().(*rollup.Enqueue) + if !ok { + return "", fmt.Errorf("cannot fetch enqueue %d", index) + } + if enqueue == nil { + return "", fmt.Errorf("cannot deserialize enqueue %d", index) + } + return enqueue.Origin.String(), nil +} diff --git a/mt-batcher/services/restorer/handle.go b/mt-batcher/services/restorer/handle.go index 78e1b877d..1496b7472 100644 --- a/mt-batcher/services/restorer/handle.go +++ b/mt-batcher/services/restorer/handle.go @@ -3,12 +3,14 @@ package restorer import ( "bytes" "context" + "encoding/json" "github.com/Layr-Labs/datalayr/common/graphView" pb "github.com/Layr-Labs/datalayr/common/interfaces/interfaceRetrieverServer" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" gecho "github.com/labstack/echo/v4" + common2 "github.com/mantlenetworkio/mantle/l2geth/common" "github.com/mantlenetworkio/mantle/l2geth/core/types" l2rlp "github.com/mantlenetworkio/mantle/l2geth/rlp" "github.com/mantlenetworkio/mantle/l2geth/rollup/eigenda" @@ -42,6 +44,13 @@ type TransactionListResponse struct { TxHash string `json:"TxHash"` } +type TransactionInfoListResponse struct { + BlockNumber string `json:"BlockNumber"` + TxHash string `json:"TxHash"` + TxMeta types.TransactionMeta `json:"TxMeta"` + TxData types.Transaction `json:"TxDetail"` +} + func (s *DaService) GetLatestTransactionBatchIndex(c gecho.Context) error { batchIndex, err := s.Cfg.EigenContract.RollupBatchIndex(&bind.CallOpts{}) if err != nil { @@ -97,7 +106,91 @@ func (s *DaService) GetBatchTransactionByDataStoreId(c gecho.Context) error { if len(reply.GetData()) >= 31*s.Cfg.EigenLayerNode { return c.JSON(http.StatusOK, reply.GetData()) } else { - log.Error("retrieve data is empty, please check da data batch") + return c.JSON(http.StatusBadRequest, errors.New("retrieve data is empty, please check da date")) + } +} + +func (s *DaService) GetDtlBatchTransactionByDataStoreId(c gecho.Context) error { + var txReq TransactionRequest + if err := c.Bind(&txReq); err != nil { + log.Error("invalid request params", "err", err) + return c.JSON(http.StatusBadRequest, errors.New("invalid request params")) + } + log.Info("GetBatchTransactionByDataStoreId Request para", "StoreNumber", txReq.StoreNumber) + conn, err := grpc.Dial(s.Cfg.RetrieverSocket, grpc.WithInsecure()) + if err != nil { + log.Error("disperser Cannot connect to", "err", err) + return c.JSON(http.StatusBadRequest, errors.New("disperser Cannot connect to")) + } + defer conn.Close() + client := pb.NewDataRetrievalClient(conn) + + opt := grpc.MaxCallRecvMsgSize(1024 * 1024 * 300) + request := &pb.FramesAndDataRequest{ + DataStoreId: txReq.StoreNumber, + } + reply, err := client.RetrieveFramesAndData(s.Ctx, request, opt) + if err != nil { + log.Error("retrieve frames and data error", "err", err) + return c.JSON(http.StatusBadRequest, errors.New("recovery data fail")) + } + if len(reply.GetData()) >= 31*s.Cfg.EigenLayerNode { + data := reply.GetData() + + batchTxn := new([]eigenda.BatchTx) + batchRlpStream := rlp.NewStream(bytes.NewBuffer(data), uint64(len(data))) + err = batchRlpStream.Decode(batchTxn) + if err != nil { + return c.JSON(http.StatusBadRequest, errors.New("decode data fail")) + } + var TxnRep []*TransactionInfoListResponse + newBatchTxn := *batchTxn + for i := 0; i < len(newBatchTxn); i++ { + l2Tx := new(types.Transaction) + txDecodeMetaData := new(eigenda.TransactionMeta) + err = json.Unmarshal(newBatchTxn[i].TxMeta, txDecodeMetaData) + if err != nil { + log.Error("Unmarshal json fail") + } + rlpStream := l2rlp.NewStream(bytes.NewBuffer(newBatchTxn[i].RawTx), 0) + if err := l2Tx.DecodeRLP(rlpStream); err != nil { + log.Error("Decode RLP fail") + continue + } + log.Info("transaction", "hash", l2Tx.Hash().Hex()) + newBlockNumber := new(big.Int).SetBytes(newBatchTxn[i].BlockNumber) + + var queueOrigin types.QueueOrigin + var l1MessageSender *common2.Address + if txDecodeMetaData.QueueIndex == nil { + queueOrigin = types.QueueOriginSequencer + l1MessageSender = nil + } else { + queueOrigin = types.QueueOriginL1ToL2 + //TODO still need to add the L1msg + addrLs := common2.HexToAddress("") + l1MessageSender = &addrLs + } + log.Info("txDecodeMetaData", "txDecodeMetaData", txDecodeMetaData) + realTxMeta := &types.TransactionMeta{ + L1BlockNumber: txDecodeMetaData.L1BlockNumber, + L1Timestamp: txDecodeMetaData.L1Timestamp, + L1MessageSender: l1MessageSender, + QueueOrigin: queueOrigin, + Index: txDecodeMetaData.Index, + QueueIndex: txDecodeMetaData.QueueIndex, + RawTransaction: txDecodeMetaData.RawTransaction, + } + txSl := &TransactionInfoListResponse{ + BlockNumber: newBlockNumber.String(), + TxHash: l2Tx.Hash().String(), + TxMeta: *realTxMeta, + TxData: *l2Tx, + } + TxnRep = append(TxnRep, txSl) + } + return c.JSON(http.StatusOK, TxnRep) + } else { return c.JSON(http.StatusBadRequest, errors.New("retrieve data is empty, please check da date")) } } @@ -165,6 +258,7 @@ func (s *DaService) GetTransactionListByStoreNumber(c gecho.Context) error { } reply, err := client.RetrieveFramesAndData(s.Ctx, request, opt) if err != nil { + log.Error("RetrieveFramesAndData retrieve frames and data error", "err", err) return c.JSON(http.StatusBadRequest, errors.New("RetrieveFramesAndData error")) } data := reply.GetData() diff --git a/mt-batcher/services/restorer/service.go b/mt-batcher/services/restorer/service.go index 3a34f20ce..0d349afea 100644 --- a/mt-batcher/services/restorer/service.go +++ b/mt-batcher/services/restorer/service.go @@ -63,6 +63,7 @@ func (s *DaService) routes() { s.echo.GET("eigen/getLatestTransactionBatchIndex", s.GetLatestTransactionBatchIndex) s.echo.POST("eigen/getRollupStoreByRollupBatchIndex", s.GetRollupStoreByRollupBatchIndex) s.echo.POST("eigen/getBatchTransactionByDataStoreId", s.GetBatchTransactionByDataStoreId) + s.echo.POST("dtl/getBatchTransactionByDataStoreId", s.GetDtlBatchTransactionByDataStoreId) s.echo.POST("browser/getDataStoreList", s.GetDataStoreList) s.echo.POST("browser/getDataStoreById", s.getDataStoreById) s.echo.POST("browser/GetTransactionListByStoreNumber", s.GetTransactionListByStoreNumber) diff --git a/mt-batcher/services/sequencer/db/store.go b/mt-batcher/services/sequencer/db/store.go index ac7960903..3b2b4573b 100644 --- a/mt-batcher/services/sequencer/db/store.go +++ b/mt-batcher/services/sequencer/db/store.go @@ -19,8 +19,8 @@ func NewStore(path string) (*Store, error) { }, nil } -func (s *Store) GetLatestBatchIndex() (uint64, bool) { - key := []byte("BatchIndex") +func (s *Store) GetReRollupBatchIndex() (uint64, bool) { + key := []byte("ReRollupBatchIndex") data, err := s.db.Get(key) if err != nil { return 0, false @@ -29,8 +29,8 @@ func (s *Store) GetLatestBatchIndex() (uint64, bool) { return bn, true } -func (s *Store) SetLatestBatchIndex(bn uint64) bool { - key := []byte("BatchIndex") +func (s *Store) SetReRollupBatchIndex(bn uint64) bool { + key := []byte("ReRollupBatchIndex") data := toByteArray(bn) err := s.db.Put(key, data) return err == nil diff --git a/mt-batcher/services/sequencer/driver.go b/mt-batcher/services/sequencer/driver.go index 358d87fef..4c7b64d97 100644 --- a/mt-batcher/services/sequencer/driver.go +++ b/mt-batcher/services/sequencer/driver.go @@ -16,12 +16,14 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" + l2gethcommon "github.com/mantlenetworkio/mantle/l2geth/common" l2ethclient "github.com/mantlenetworkio/mantle/l2geth/ethclient" l2rlp "github.com/mantlenetworkio/mantle/l2geth/rlp" common3 "github.com/mantlenetworkio/mantle/l2geth/rollup/eigenda" "github.com/mantlenetworkio/mantle/mt-batcher/bindings" rc "github.com/mantlenetworkio/mantle/mt-batcher/bindings" common2 "github.com/mantlenetworkio/mantle/mt-batcher/common" + "github.com/mantlenetworkio/mantle/mt-batcher/services/client" common4 "github.com/mantlenetworkio/mantle/mt-batcher/services/common" "github.com/mantlenetworkio/mantle/mt-batcher/services/sequencer/db" "github.com/mantlenetworkio/mantle/mt-batcher/txmgr" @@ -29,7 +31,6 @@ import ( "github.com/shurcooL/graphql" "google.golang.org/grpc" "math/big" - "strconv" "strings" "sync" "time" @@ -40,6 +41,7 @@ type SignerFn func(context.Context, common.Address, *types.Transaction) (*types. type DriverConfig struct { L1Client *ethclient.Client L2Client *l2ethclient.Client + DtlClientUrl string EigenDaContract *bindings.BVMEigenDataLayrChain RawEigenContract *bind.BoundContract EigenABI *abi.ABI @@ -72,6 +74,7 @@ type Driver struct { WalletAddr common.Address GraphClient *graphView.GraphClient GraphqlClient *graphql.Client + DtlClient client.DtlClient txMgr txmgr.TxManager LevelDBStore *db.Store cancel func() @@ -100,7 +103,7 @@ func NewDriver(ctx context.Context, cfg *DriverConfig) (*Driver, error) { log.Error("init leveldb fail", "err", err) return nil, err } - + dtlClient := client.NewDtlClient(cfg.DtlClientUrl) walletAddr := crypto.PubkeyToAddress(cfg.PrivKey.PublicKey) return &Driver{ Cfg: cfg, @@ -108,6 +111,7 @@ func NewDriver(ctx context.Context, cfg *DriverConfig) (*Driver, error) { WalletAddr: walletAddr, GraphClient: graphClient, GraphqlClient: graphqlClient, + DtlClient: dtlClient, txMgr: txMgr, LevelDBStore: levelDBStore, cancel: cancel, @@ -179,15 +183,28 @@ func (d *Driver) TxAggregator(ctx context.Context, start, end *big.Int) (transac panic(fmt.Sprintf("MtBatcher attempting to create batch element from block %d, "+ "found %d txs instead of 1", block.Number(), len(txs))) } - log.Info("MtBatcher origin transactions", "TxHash", txs[0].Hash().String(), "l2BlockNumber", block.Number(), "QueueOrigin", txs[0].QueueOrigin(), "Index", txs[0].GetMeta().Index, "i", i) + log.Info("MtBatcher origin transactions", "TxHash", txs[0].Hash().String(), "l2BlockNumber", block.Number(), "QueueOrigin", txs[0].QueueOrigin(), "Index", *txs[0].GetMeta().Index, "QueueIndex", txs[0].GetMeta().QueueIndex, "i", i) var txBuf bytes.Buffer if err := txs[0].EncodeRLP(&txBuf); err != nil { panic(fmt.Sprintf("MtBatcher Unable to encode tx: %v", err)) } + var l1MessageSender *l2gethcommon.Address + if txs[0].GetMeta().QueueIndex != nil { + l1Origin, err := d.DtlClient.GetEnqueueByIndex(*txs[0].GetMeta().QueueIndex) + if err != nil { + l1MessageSender = txs[0].GetMeta().L1MessageSender + } else { + originAddress := l2gethcommon.HexToAddress(l1Origin) + l1MessageSender = &originAddress + } + } else { + l1MessageSender = txs[0].GetMeta().L1MessageSender + } + log.Info("MtBatcher l1 tx origin", "address", l1MessageSender) txMeta := &common3.TransactionMeta{ L1BlockNumber: txs[0].GetMeta().L1BlockNumber, L1Timestamp: txs[0].GetMeta().L1Timestamp, - L1MessageSender: txs[0].GetMeta().L1MessageSender, + L1MessageSender: l1MessageSender, Index: txs[0].GetMeta().Index, QueueIndex: txs[0].GetMeta().QueueIndex, RawTransaction: txs[0].GetMeta().RawTransaction, @@ -217,7 +234,16 @@ func (d *Driver) TxAggregator(ctx context.Context, start, end *big.Int) (transac if err != nil { panic(fmt.Sprintf("MtBatcher Unable to encode txn: %v", err)) } - if len(txnBufBytes) > 31*d.Cfg.EigenLayerNode { + var totalNode int + daNodes, err := d.GetEigenLayerNode() + if err != nil { + log.Error("get da node fail", "err", err) + totalNode = d.Cfg.EigenLayerNode + } else { + log.Info("MtBatcher current da node", "totalNode", daNodes) + totalNode = daNodes + } + if len(txnBufBytes) > 31*totalNode { transactionByte = txnBufBytes } else { paddingBytes := make([]byte, (31*d.Cfg.EigenLayerNode)-len(txnBufBytes)) @@ -344,6 +370,15 @@ func (d *Driver) DisperseStoreData(data []byte, startl2BlockNumber *big.Int, end return params, receipt, nil } +func (d *Driver) GetEigenLayerNode() (int, error) { + operators, err := d.GraphClient.QueryOperators() + if err != nil { + log.Error("MtBatcher query operators fail", "err", err) + return 0, err + } + return len(operators), nil +} + func (d *Driver) ConfirmStoredData(txHash []byte, params common2.StoreParams, startl2BlockNumber, endl2BlockNumber *big.Int, originDataStoreId uint32, reConfirmedBatchIndex *big.Int, isReRollup bool) (*types.Receipt, error) { event, ok := graphView.PollingInitDataStore( d.GraphClient, @@ -494,10 +529,10 @@ func (d *Driver) Start() error { d.wg.Add(1) go d.RollupMainWorker() if d.Cfg.CheckerEnable { - batchIndex, ok := d.LevelDBStore.GetLatestBatchIndex() + batchIndex, ok := d.LevelDBStore.GetReRollupBatchIndex() log.Info("get latest batch index", "batchIndex", batchIndex, "ok", ok) if batchIndex == 0 || !ok { - d.LevelDBStore.SetLatestBatchIndex(1) + d.LevelDBStore.SetReRollupBatchIndex(1) } go d.CheckConfirmedWorker() } @@ -560,62 +595,58 @@ func (d *Driver) CheckConfirmedWorker() { for { select { case <-ticker.C: - lastestBatchIndex, err := d.Cfg.EigenDaContract.RollupBatchIndex(&bind.CallOpts{}) + latestReRollupBatchIndex, err := d.Cfg.EigenDaContract.ReRollupIndex(&bind.CallOpts{}) if err != nil { log.Error("Checker get batch index fail", "err", err) continue } - batchIndex, ok := d.LevelDBStore.GetLatestBatchIndex() + batchIndex, ok := d.LevelDBStore.GetReRollupBatchIndex() if !ok { log.Error("Checker get batch index from db fail", "err", err) continue } - if d.Cfg.CheckerBatchIndex > lastestBatchIndex.Uint64() { - log.Info("Checker Batch Index", "DbBatchIndex", batchIndex, "ContractBatchIndex", lastestBatchIndex.Uint64()-d.Cfg.CheckerBatchIndex) - continue - } - if batchIndex >= (lastestBatchIndex.Uint64() - d.Cfg.CheckerBatchIndex) { - log.Info("Checker db batch index and contract batch idnex is equal", "DbBatchIndex", batchIndex, "ContractBatchIndex", lastestBatchIndex.Uint64()-d.Cfg.CheckerBatchIndex) + + if batchIndex >= latestReRollupBatchIndex.Uint64() { + log.Info("Checker db batch index and contract batch idnex is equal", "DbBatchIndex", batchIndex, "latestReRollupBatchIndex", latestReRollupBatchIndex.Uint64()) continue } - log.Info("Checker db batch index and contract batch idnex", "DbBatchIndex", batchIndex, "ContractBatchIndex", lastestBatchIndex.Uint64()) - for i := batchIndex; i <= (lastestBatchIndex.Uint64() - d.Cfg.CheckerBatchIndex); i++ { + + log.Info("Checker db batch index and contract batch idnex", "DbBatchIndex", batchIndex, "ContractBatchIndex", latestReRollupBatchIndex.Uint64()) + for i := batchIndex; i <= latestReRollupBatchIndex.Uint64(); i++ { log.Info("Checker batch confirm data index", "batchIndex", i) - rollupStore, err := d.Cfg.EigenDaContract.GetRollupStoreByRollupBatchIndex(&bind.CallOpts{}, big.NewInt(int64(i))) + batchIndex, err := d.Cfg.EigenDaContract.ReRollupBatchIndex(&bind.CallOpts{}, big.NewInt(int64(i))) if err != nil { - log.Info("Checker get batch rollup store fail", "err", err) + log.Info("Checker get batch index by re rollup index fail", "err", err) continue } - var query struct { - DataStore graphView.DataStoreGql `graphql:"dataStore(id: $storeId)"` - } - variables := map[string]interface{}{ - "storeId": graphql.String(strconv.Itoa(int(rollupStore.DataStoreId))), - } - err = d.GraphqlClient.Query(d.Ctx, &query, variables) + + rollupStore, err := d.Cfg.EigenDaContract.RollupBatchIndexRollupStores(&bind.CallOpts{}, batchIndex) if err != nil { - log.Error("Checker query data from graphql fail", "err", err) + log.Info("Checker get rollup store fail", "err", err) continue } - log.Info("Checker dataStore confirmed state", "dataStore-confirmed", query.DataStore.Confirmed) - if !query.DataStore.Confirmed { - rollupBlock, err := d.Cfg.EigenDaContract.GetL2RollUpBlockByDataStoreId(&bind.CallOpts{}, rollupStore.DataStoreId) + if rollupStore.DataStoreId > 0 { + rollupBlock, err := d.Cfg.EigenDaContract.DataStoreIdToL2RollUpBlock(&bind.CallOpts{}, rollupStore.DataStoreId) if err != nil { - log.Error("Checker get batch index fail", "err", err) + log.Info("Checker get l2 rollup block fail", "err", err) continue } + aggregateTxData, startL2BlockNumber, endL2BlockNumber := d.TxAggregator( d.Ctx, rollupBlock.StartL2BlockNumber, rollupBlock.EndBL2BlockNumber, ) + if err != nil { log.Error("Checker eigenDa sequencer unable to craft batch tx", "err", err) continue } + params, receipt, err := d.DisperseStoreData(aggregateTxData, startL2BlockNumber, endL2BlockNumber, true) if err != nil { log.Error("Checker disperse store data fail", "err", err) continue } + log.Info("MtBatcher disperse re-rollup store data success", "txHash", receipt.TxHash.String()) csdReceipt, err := d.ConfirmStoredData(receipt.TxHash.Bytes(), params, startL2BlockNumber, endL2BlockNumber, rollupStore.DataStoreId, big.NewInt(int64(i)), true) if err != nil { @@ -623,11 +654,8 @@ func (d *Driver) CheckConfirmedWorker() { continue } log.Info("Checker confirm re-rollup store data success", "txHash", csdReceipt.TxHash.String()) - d.LevelDBStore.SetLatestBatchIndex(i - (2 * d.Cfg.CheckerBatchIndex)) - } else { - log.Info("Checker rollup batch data is confirmed", "BatchIndex", batchIndex, "DataStoreId", rollupStore.DataStoreId) - d.LevelDBStore.SetLatestBatchIndex(i - d.Cfg.CheckerBatchIndex) } + d.LevelDBStore.SetReRollupBatchIndex(i) } case err := <-d.Ctx.Done(): log.Error("MtBatcher eigenDa sequencer service shutting down", "err", err) diff --git a/mt-challenger/bindings/bvm_eigen_datalayr_chain.go b/mt-challenger/bindings/bvm_eigen_datalayr_chain.go index 30f00b5b6..a81c9ce23 100644 --- a/mt-challenger/bindings/bvm_eigen_datalayr_chain.go +++ b/mt-challenger/bindings/bvm_eigen_datalayr_chain.go @@ -93,8 +93,8 @@ type IDataLayrServiceManagerDataStoreSearchData struct { // BVMEigenDataLayrChainMetaData contains all meta data concerning the BVMEigenDataLayrChain contract. var BVMEigenDataLayrChainMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"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\":\"uint256\",\"name\":\"rollupBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rollupBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreReverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BLOCK_STALE_MEASURE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRAUD_STRING\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"durationDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"globalDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"confirmer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreSearchData\",\"name\":\"searchData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"startL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"reConfirmedBatchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"name\":\"confirmData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dataManageAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"dataStoreIdToL2RollUpBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"dataStoreIdToRollupStoreNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fraudProofPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL2ConfirmedBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dataStoreId\",\"type\":\"uint32\"}],\"name\":\"getL2RollUpBlockByDataStoreId\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"internalType\":\"structBVM_EigenDataLayrChain.BatchRollupBlock\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL2StoredBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupBatchIndex\",\"type\":\"uint256\"}],\"name\":\"getRollupStoreByRollupBatchIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"confirmAt\",\"type\":\"uint32\"},{\"internalType\":\"enumBVM_EigenDataLayrChain.RollupStoreStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structBVM_EigenDataLayrChain.RollupStore\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_dataManageAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_block_stale_measure\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fraudProofPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2SubmittedBlockNumber\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ConfirmedBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2StoredBlockNumber\",\"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\":\"bytes[]\",\"name\":\"polys\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"parse\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fraudulentStoreNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"durationDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"globalDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"confirmer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreSearchData\",\"name\":\"searchData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"firstChunkNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes[]\",\"name\":\"polys\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"interpolationPoly\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"revealProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"zeroPoly\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"zeroPolyProof\",\"type\":\"bytes\"}],\"internalType\":\"structDataLayrDisclosureLogic.MultiRevealProof[]\",\"name\":\"multiRevealProofs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"polyEquivalenceProof\",\"type\":\"tuple\"}],\"internalType\":\"structBVM_EigenDataLayrChain.DisclosureProofs\",\"name\":\"disclosureProofs\",\"type\":\"tuple\"}],\"name\":\"proveFraud\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"removeFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupBatchIndex\",\"type\":\"uint256\"}],\"name\":\"resetRollupBatchData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rollupBatchIndexRollupStores\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"confirmAt\",\"type\":\"uint32\"},{\"internalType\":\"enumBVM_EigenDataLayrChain.RollupStoreStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"startL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"totalOperatorsIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"name\":\"storeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"unavailableFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dataManageAddress\",\"type\":\"address\"}],\"name\":\"updateDataLayrManagerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fraudProofPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFraudProofPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2ConfirmedBlockNumber\",\"type\":\"uint256\"}],\"name\":\"updateL2ConfirmedBlockNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2StoredBlockNumber\",\"type\":\"uint256\"}],\"name\":\"updateL2StoredBlockNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"updateSequencerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061494c806100206000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f578063c8fff01b116100a2578063f249502911610071578063f2495029146104cd578063f2a8f124146104ed578063f2fde38b146104f6578063f7db97951461050957600080fd5b8063c8fff01b1461045d578063c96c0d3814610470578063d13f90b4146104a7578063d7fbc2e2146104ba57600080fd5b806392f30a45116100de57806392f30a45146103d25780639495de4014610421578063990fca6614610434578063b537c4c71461043d57600080fd5b8063715018a6146103915780637bd85879146103995780638bea6cae146103ac5780638da5cb5b146103b457600080fd5b806332c58f7a116101875780635c1bba38116101565780635c1bba38146103275780635d42ffb71461036c5780635e4a3056146103755780635e8b3f2d1461038857600080fd5b806332c58f7a1461029e5780633c762984146102b157806346b2eb9b146102ba57806359cb6391146102c257600080fd5b80632e260ac3116101c35780632e260ac3146102465780632e64b4c0146102595780632e72866b1461026c578063301b39ab1461028c57600080fd5b806302d777de146101f5578063060ee9a41461020a5780630a33202e1461020a5780631f944c8f1461021d575b600080fd5b610208610203366004613b3a565b61051c565b005b610208610218366004613b3a565b6105f5565b61023061022b366004613b55565b6106ce565b60405161023d9190613c07565b60405180910390f35b610208610254366004613e64565b610837565b610208610267366004613eff565b610ec0565b61027f61027a366004613eff565b610f52565b60405161023d9190613f82565b609a545b60405190815260200161023d565b6102086102ac366004613b3a565b61100b565b610290609d5481565b6102306110e7565b6103176102d0366004613eff565b609e6020526000908152604090205463ffffffff80821691640100000000810482169168010000000000000000820416906c01000000000000000000000000900460ff1684565b60405161023d9493929190613fc0565b6097546103479073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161023d565b610290609b5481565b610208610383366004613ff3565b611103565b61029060995481565b610208611426565b6102086103a7366004614081565b61143a565b609b54610290565b60335473ffffffffffffffffffffffffffffffffffffffff16610347565b6104046103e03660046140eb565b609f6020526000908152604090208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161023d565b61020861042f366004613eff565b611bbe565b610290609a5481565b61029061044b3660046140eb565b60a06020526000908152604090205481565b61020861046b366004613b3a565b611c50565b61048361047e3660046140eb565b611d24565b6040805182518152602080840151908201529181015115159082015260600161023d565b6102086104b5366004614108565b611d8e565b6102086104c8366004613eff565b611f74565b6098546103479073ffffffffffffffffffffffffffffffffffffffff1681565b610290609c5481565b610208610504366004613b3a565b612006565b610208610517366004613eff565b6120a3565b60975473ffffffffffffffffffffffffffffffffffffffff1633146105ae5760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520646c60448201527f736d20616464726573730000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b609880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60975473ffffffffffffffffffffffffffffffffffffffff1633146106825760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e2072656d6f766520667260448201527f6175642070726f6f66206164647265737300000000000000000000000000000060648201526084016105a5565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a16020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6060806000845b848351101561082b576000610750826106ef6020826141b3565b6106fa9060016141c7565b6107059060206141df565b61070f91906141fe565b855161071b90896141fe565b848c8c8881811061072e5761072e614215565b90506020028101906107409190614244565b61074b9291506141fe565b612193565b90508389898581811061076557610765614215565b90506020028101906107779190614244565b849061078385836141c7565b92610790939291906142a9565b6040516020016107a2939291906142d3565b6040516020818303038152906040529350835186116107c1575061082b565b8888848181106107d3576107d3614215565b90506020028101906107e59190614244565b90506107f182846141c7565b141561080d5782610801816142fb565b93505060019150610825565b6108188160016141c7565b61082290836141c7565b91505b506106d5565b50909695505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146108c45760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79207468652073657175656e6365722063616e2073746f72652064617460448201527f610000000000000000000000000000000000000000000000000000000000000060648201526084016105a5565b855160409081015163ffffffff166000908152609f6020522054851480156109075750855160409081015163ffffffff166000908152609f602052206001015484145b80156109355750855160409081015163ffffffff166000908152609f602052206002015460ff161515811515145b6109cd5760405162461bcd60e51b815260206004820152605560248201527f446174612073746f72652065697468657220776173206e6f7420696e6974696160448201527f6c697a65642062792074686520726f6c6c757020636f6e74726163742c206f7260648201527f20697320616c726561647920636f6e6669726d65640000000000000000000000608482015260a4016105a5565b855160409081015163ffffffff16600090815260a0602052205460001914610a835760405162461bcd60e51b815260206004820152605560248201527f446174612073746f72652065697468657220776173206e6f7420696e6974696160448201527f6c697a65642062792074686520726f6c6c757020636f6e74726163742c206f7260648201527f20697320616c726561647920636f6e6669726d65640000000000000000000000608482015260a4016105a5565b6098546040517f5189951500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690635189951590610add908b908b908b9060040161435f565b600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b5050505080610cf55760408051608081018252875182015163ffffffff90811682528851830151166020820152609c549091820190610b4a90426141c7565b63ffffffff16815260200160019052609d546000908152609e602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115610c6057610c60613f18565b02179055505050609b849055609d8054875160409081015163ffffffff16600090815260a06020529081208290557fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f6729290610cba836142fb565b909155508751604090810151815163ffffffff93841681529216602083015281018790526060810186905260800160405180910390a1610eb6565b60405180608001604052808463ffffffff16815260200187600001516040015163ffffffff168152602001609c5442610d2e91906141c7565b63ffffffff168152602001600190526000838152609e602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115610e4157610e41613f18565b021790555050865160409081015163ffffffff908116600090815260a060209081529083902086905589518301518351878152921690820152908101879052606081018690527fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f672915060800160405180910390a15b5050505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff163314610f4d5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e20736574206c6174657360448201527f74206c3220626c6f636b206e756d62657200000000000000000000000000000060648201526084016105a5565b609b55565b610f7a6040805160808101825260008082526020820181905291810182905290606082015290565b6000828152609e60209081526040918290208251608081018452815463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316938101939093529060608301906c01000000000000000000000000900460ff166002811115610ff157610ff1613f18565b600281111561100257611002613f18565b90525092915050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146110985760405162461bcd60e51b815260206004820152603a60248201527f4f6e6c79207468652073657175656e6365722063616e2073657420667261756460448201527f2070726f6f66206164647265737320756e617661696c61626c6500000000000060648201526084016105a5565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a16020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6040518060800160405280606081526020016148b76060913981565b60975473ffffffffffffffffffffffffffffffffffffffff1633146111905760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79207468652073657175656e6365722063616e2073746f72652064617460448201527f610000000000000000000000000000000000000000000000000000000000000060648201526084016105a5565b6099546111a363ffffffff8716436141fe565b106111f05760405162461bcd60e51b815260206004820152601e60248201527f7374616b65732074616b656e2066726f6d20746f6f206c6f6e672061676f000060448201526064016105a5565b609854604080517f72d18e8d000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916372d18e8d916004808301926020929190829003018186803b15801561125b57600080fd5b505afa15801561126f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112939190614429565b9050609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf49ea733308a8a888f8f6040518863ffffffff1660e01b81526004016112fc9796959493929190614446565b602060405180830381600087803b15801561131657600080fd5b505af115801561132a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134e9190614429565b5060408051606081018252868152602080820187815285151583850190815263ffffffff86166000908152609f8452858120945185559151600185015551600290930180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169315159390931790925560a09052206000199055816113d457609a8490555b6040805163ffffffff83168152602081018790529081018590527fa99ca06ac3461399088feac88ec48dc5a47d61c3b6839eab20146f2c4ee535849060600160405180910390a1505050505050505050565b61142e6121c8565b611438600061222f565b565b33600090815260a1602052604090205460ff1615156001146114c45760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c792066726175642070726f6f66207768697465206c6973742063616e2060448201527f6368616c6c656e6765206461746100000000000000000000000000000000000060648201526084016105a5565b6000848152609e602090815260408083208151608081018352815463ffffffff8082168352640100000000820481169583019590955268010000000000000000810490941692810192909252909160608301906c01000000000000000000000000900460ff16600281111561153b5761153b613f18565b600281111561154c5761154c613f18565b905250905060018160600151600281111561156957611569613f18565b14801561157f575042816040015163ffffffff16115b6115f15760405162461bcd60e51b815260206004820152602d60248201527f526f6c6c757053746f7265206d75737420626520636f6d6d697474656420616e60448201527f6420756e636f6e6669726d65640000000000000000000000000000000000000060648201526084016105a5565b82516115fc906122a6565b6098546020850151604080870151606088015191517fed82c0ee00000000000000000000000000000000000000000000000000000000815260ff9093166004840152602483015263ffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091169063ed82c0ee9060640160206040518083038186803b15801561168857600080fd5b505afa15801561169c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c091906144aa565b1461170d5760405162461bcd60e51b815260206004820152601e60248201527f6d6574616461746120707265696d61676520697320696e636f7272656374000060448201526064016105a5565b806020015163ffffffff1683600001516040015163ffffffff16146117c05760405162461bcd60e51b815260206004820152604260248201527f7365616368446174612773206461746173746f7265206964206973206e6f742060448201527f636f6e73697374656e74207769746820676976656e20726f6c6c75702073746f60648201527f7265000000000000000000000000000000000000000000000000000000000000608482015260a4016105a5565b6117ca8280614244565b6040516117d89291906144c3565b604051908190039020835151146118575760405162461bcd60e51b815260206004820152603260248201527f646973636c6f737572652070726f6f667320686561646572686173682070726560448201527f696d61676520697320696e636f7272656374000000000000000000000000000060648201526084016105a5565b6118976118648380614244565b61187460408601602087016140eb565b61188160408701876144d3565b61188e60608901896144d3565b896080016123c6565b6118e35760405162461bcd60e51b815260206004820152601d60248201527f646973636c6f737572652070726f6f66732061726520696e76616c696400000060448201526064016105a5565b60006118f76118f28480614244565b6129be565b905063ffffffff811661190d60408501856144d3565b905061191f60408601602087016140eb565b63ffffffff1661192f91906141c7565b11156119a35760405162461bcd60e51b815260206004820152602e60248201527f43616e206f6e6c792070726f766520646174612066726f6d207468652073797360448201527f74656d61746963206368756e6b7300000000000000000000000000000000000060648201526084016105a5565b60006119d56119b560408601866144d3565b886040518060800160405280606081526020016148b760609139516106ce565b90506040518060800160405280606081526020016148b76060913951815114611a8c5760405162461bcd60e51b815260206004820152604260248201527f50617273696e67206572726f722c2070726f76656e20737472696e672069732060448201527f646966666572656e74206c656e677468207468616e206672617564207374726960648201527f6e67000000000000000000000000000000000000000000000000000000000000608482015260a4016105a5565b6040518060800160405280606081526020016148b76060913980519060200120818051906020012014611b015760405162461bcd60e51b815260206004820152601d60248201527f70726f76656e20737472696e6720213d20667261756420737472696e6700000060448201526064016105a5565b6000878152609e6020908152604080832080547fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff166c02000000000000000000000000179055875181015163ffffffff908116808552609f8452828520548a518401519092168552938290206001015482518c81529384019490945282820152606082019290925290517fca227c67a02028763083580d42e8bdef4bb49c393068d05983421cd7a4a2a5be9181900360800190a150505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff163314611c4b5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e20736574206c6174657360448201527f74206c3220626c6f636b206e756d62657200000000000000000000000000000060648201526084016105a5565b609a55565b60975473ffffffffffffffffffffffffffffffffffffffff163314611cdd5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520736560448201527f7175656e6365722061646472657373000000000000000000000000000000000060648201526084016105a5565b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611d4a604051806060016040528060008152602001600081526020016000151581525090565b5063ffffffff166000908152609f60209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b600054610100900460ff1615808015611dae5750600054600160ff909116105b80611dc85750303b158015611dc8575060005460ff166001145b611e3a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105a5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611e9857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b611ea06129cd565b6097805473ffffffffffffffffffffffffffffffffffffffff8089167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560988054928816929091169190911790556099849055609c839055609a829055609b8290558015611f6c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146120015760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520667260448201527f6175642070726f6f6620706572696f640000000000000000000000000000000060648201526084016105a5565b609c55565b61200e6121c8565b73ffffffffffffffffffffffffffffffffffffffff81166120975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105a5565b6120a08161222f565b50565b60975473ffffffffffffffffffffffffffffffffffffffff1633146121305760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520736560448201527f7175656e6365722061646472657373000000000000000000000000000000000060648201526084016105a5565b60005b609d54811015612183576000818152609e6020526040902080547fffffffffffffffffffffffffffffffffffffff000000000000000000000000001690558061217b816142fb565b915050612133565b50609d556001609a819055609b55565b60008284106121af578183106121a957816121be565b826121be565b8184106121bc57816121be565b835b90505b9392505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146114385760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105a5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080826000015183602001518460400151856060015186608001518760a001518860c00151604051602001612389979695949392919096875260e095861b7fffffffff00000000000000000000000000000000000000000000000000000000908116602089015294861b851660248801529290941b909216602885015260a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016602c84015260609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166038830152604c820152606c0190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209392505050565b6000808567ffffffffffffffff8111156123e2576123e2613ca1565b60405190808252806020026020018201604052801561240b578160200160208202803683370190505b50905060006124988b8b6040805160c08101825260006080820181815260a0830182905282526020820181905291810182905260608101919091525050604080518082018252823581526020838101358183015282516080810184529182528383013560e090811c918301919091526044840135811c92820192909252604890920135901c606082015290565b90508460005b818110156127775761256e836124b4838e61453b565b8a8a858181106124c6576124c6614215565b90506020028101906124d89190614563565b8b8b868181106124ea576124ea614215565b90506020028101906124fc9190614563565b6040018c8c8781811061251157612511614215565b90506020028101906125239190614563565b60800180360381019061253691906145f1565b8d8d8881811061254857612548614215565b905060200281019061255a9190614563565b61256990610100810190614244565b612a52565b6125e05760405162461bcd60e51b815260206004820152602260248201527f52657665616c206661696c65642064756520746f206e6f6e203120706169726960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016105a5565b8989828181106125f2576125f2614215565b90506020028101906126049190614244565b905083602001516020612617919061464e565b65ffffffffffff16146126925760405162461bcd60e51b815260206004820152603860248201527f506f6c796e6f6d69616c206d757374206861766520612032353620626974206360448201527f6f656666696369656e7420666f722065616368207465726d000000000000000060648201526084016105a5565b8989828181106126a4576126a4614215565b90506020028101906126b69190614244565b6040516126c49291906144c3565b60405180910390208888838181106126de576126de614215565b90506020028101906126f09190614563565b3589898481811061270357612703614215565b90506020028101906127159190614563565b60405161273c93929160209081013591019283526020830191909152604082015260600190565b6040516020818303038152906040528051906020012084828151811061276457612764614215565b602090810291909101015260010161249e565b5060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001846040516020016127ac91906146af565b6040516020818303038152906040528051906020012060001c6127cf91906146bb565b90506127d9613a7f565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185600060405160200161280e9291906146cf565b6040516020818303038152906040528051906020012060001c61283191906146bb565b808252602082015260008989828161284b5761284b614215565b905060200281019061285d9190614563565b61286d90368190038101906146e8565b9050600061289f8d8d600081811061288757612887614215565b90506020028101906128999190614244565b86612c5a565b905060015b8a81101561299c576128f6836128f18e8e858181106128c5576128c5614215565b90506020028101906128d79190614563565b6128e790368190038101906146e8565b6020880151612d00565b612d96565b925060006129278f8f8481811061290f5761290f614215565b90506020028101906129219190614244565b88612c5a565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828760016020020151098408602086015186519194507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001910960208601525080612994816142fb565b9150506128a4565b506129a9828a8684612e32565b97505050505050505098975050505050505050565b604482013560e01c5b92915050565b600054610100900460ff16612a4a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105a5565b611438612fc1565b825160208082015191518186015180830151905160408051948501959095529383019190915260608201526080810191909152600090612b0f9060a00160405160208183030381529060405280519060200120612ab8898b604001518c60600151613047565b63ffffffff16612ad38b6020015165ffffffffffff166131b3565b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134b392505050565b612b5b5760405162461bcd60e51b815260206004820181905260248201527f496e636f7272656374207a65726f20706f6c79206d65726b6c652070726f6f6660448201526064016105a5565b8751600090612b7b906128f1612b76368b90038b018b6146e8565b613629565b604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d602083810191909152810191909152909150612c4c612c44368990038901896146e8565b8784846136e8565b9a9950505050505050505050565b600080836001825b82811015612cf4576000888289612c7a8260206141c7565b92612c87939291906142a9565b612c909161471a565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180848309860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018784099250612cec6020836141c7565b915050612c62565b50919695505050505050565b6040805180820190915260008082526020820152612d1c613a9d565b83518152602080850151908201526040808201849052600090836060846007600019fa905080612d8e5760405162461bcd60e51b815260206004820152601060248201527f626e3235342d6d756c2d6661696c65640000000000000000000000000000000060448201526064016105a5565b505092915050565b6040805180820190915260008082526020820152612db2613abb565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa905080612d8e5760405162461bcd60e51b815260206004820152601060248201527f626e3235342d6164642d6661696c65640000000000000000000000000000000060448201526064016105a5565b60408051808201909152600181526002602082015260009081612e5d612e5783613629565b86612d00565b604080518082019091527f220ac48bb1f91fd93f502a3d0caa077ac70e0af8819b9d8fa26a168a2c558a5781527f08f54b82af08ceaf7cd5f180bac94870f6d8100a9c9afa9dd09a4491653891126020820152909150612ebd8183612d96565b91506000612ed3612ecd85613629565b87612d00565b90506000612ee18a83612d96565b604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d602083810191909152810191909152909150612fb285612fab368d90038d018d6145f1565b84846136e8565b9b9a5050505050505050505050565b600054610100900460ff1661303e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105a5565b6114383361222f565b600080613054838561453b565b905060006130678563ffffffff16613955565b905060006130758684614738565b63ffffffff161561308757600161308a565b60005b60ff16613097878561475b565b6130a1919061453b565b905060006130bd6130b2838561477e565b63ffffffff16613955565b90508663ffffffff168863ffffffff1610156130ff57806130de828a613982565b6130ea9061010061477e565b6130f4919061475b565b9450505050506121c1565b61310987846147a1565b61311390826147a1565b63ffffffff168863ffffffff16101561314557806130de81856131368b8d6147a1565b613140919061453b565b613982565b60405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420637265617465206e756d626572206f66206672616d6520686960448201527f67686572207468616e20706f737369626c65000000000000000000000000000060648201526084016105a5565b6000806131bf836139c1565b9050806131ee57507fe82cea94884b1b895ea0742840a3b19249a723810fd1b04d8564d675b0a416f192915050565b806001141561321f57507f4843774a80fc8385b31024f5bd18b42e62de439206ab9468d42d826796d41f6792915050565b806002141561325057507f092d3e5f87f5293e7ab0cc2ca6b0b5e4adb5e0011656544915f7cea34e69e5ab92915050565b806003141561328157507f494b208540ec8624fbbb3f2c64ffccdaf6253f8f4e50c0d93922d88195b0775592915050565b80600414156132b257507ffdb44b84a82893cfa0e37a97f09ffc4298ad5e62be1bea1d03320ae836213d2292915050565b80600514156132e357507f3f50cb08231d2a76853ba9dbb20dad45a1b75c57cdaff6223bfe069752cff3d492915050565b806006141561331457507fbb39eebd8138eefd5802a49d571e65b3e0d4e32277c28fbf5fbca66e7fb0431092915050565b806007141561334557507ff0a39b513e11fa80cbecbf352f69310eddd5cd03148768e0e9542bd600b133ec92915050565b806008141561337657507f038cca2238865414efb752cc004fffec9e6069b709f495249cdf36efbd5952f692915050565b80600914156133a757507f2a26b054ed559dd255d8ac9060ebf6b95b768d87de767f8174ad2f9a4e48dd0192915050565b80600a14156133d857507f1fe180d0bc4ff7c69fefa595b3b5f3c284535a280f6fdcf69b20770d1e20e1fc92915050565b80600b141561340957507f60e34ad57c61cd6fdd8177437c30e4a30334e63d7683989570cf27020efc820192915050565b80600c141561343a57507feda2417e770ddbe88f083acf06b6794dfb76301314a32bd0697440d76f6cd9cc92915050565b80600d141561346b57507f8cbe9b8cf92ce70e3bec8e1e72a0f85569017a7e43c3db50e4a5badb8dea7ce892915050565b60405162461bcd60e51b815260206004820152601660248201527f4c6f67206e6f7420696e2076616c69642072616e67650000000000000000000060448201526064016105a5565b6000602082516134c391906146bb565b156135105760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e67746800000000000000000000000060448201526064016105a5565b60006020835161352091906141b3565b905061352d8160026148aa565b851061357b5760405162461bcd60e51b815260206004820152601560248201527f4c65616620696e64657820697320746f6f20626967000000000000000000000060448201526064016105a5565b60008660205b8551811161361b5785810151925061359a6002896146bb565b6135cf5760408051602081018490529081018490526060016040516020818303038152906040528051906020012091506135fc565b60408051602081018590529081018390526060016040516020818303038152906040528051906020012091505b6136076002896141b3565b97506136146020826141c7565b9050613581565b509094149695505050505050565b6040805180820190915260008082526020820152815115801561364e57506020820151155b1561366c575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516136b191906146bb565b6136db907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476141fe565b905292915050565b919050565b604080518082018252858152602080820185905282518084019093528583528201839052600091613717613ad9565b60005b60028110156138dc5760006137308260066141df565b905084826002811061374457613744614215565b602002015151836137568360006141c7565b600c811061376657613766614215565b602002015284826002811061377d5761377d614215565b6020020151602001518382600161379491906141c7565b600c81106137a4576137a4614215565b60200201528382600281106137bb576137bb614215565b60200201515151836137ce8360026141c7565b600c81106137de576137de614215565b60200201528382600281106137f5576137f5614215565b602002015151600160200201518361380e8360036141c7565b600c811061381e5761381e614215565b602002015283826002811061383557613835614215565b60200201516020015160006002811061385057613850614215565b6020020151836138618360046141c7565b600c811061387157613871614215565b602002015283826002811061388857613888614215565b6020020151602001516001600281106138a3576138a3614215565b6020020151836138b48360056141c7565b600c81106138c4576138c4614215565b602002015250806138d4816142fb565b91505061371a565b506138e5613af8565b60006020826101808560086107d05a03fa9050806139455760405162461bcd60e51b815260206004820152601460248201527f626e3235342d70616972696e672d6661696c656400000000000000000000000060448201526064016105a5565b5051151598975050505050505050565b600060015b82816001901b10156139785780613970816142fb565b91505061395a565b6001901b92915050565b6000806139948463ffffffff166139c1565b61399f9060206147a1565b90508063ffffffff166139b184613a31565b63ffffffff16901c949350505050565b6000808211613a125760405162461bcd60e51b815260206004820152601360248201527f4c6f67206d75737420626520646566696e65640000000000000000000000000060448201526064016105a5565b60005b600183821c146129c75780613a29816142fb565b915050613a15565b600080805b6020811015613a78576001811b84811663ffffffff1615613a6557613a5c82601f6141fe565b6001901b831792505b5080613a70816142fb565b915050613a36565b5092915050565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146136e357600080fd5b600060208284031215613b4c57600080fd5b6121c182613b16565b60008060008060608587031215613b6b57600080fd5b843567ffffffffffffffff80821115613b8357600080fd5b818701915087601f830112613b9757600080fd5b813581811115613ba657600080fd5b8860208260051b8501011115613bbb57600080fd5b6020928301999098509187013596604001359550909350505050565b60005b83811015613bf2578181015183820152602001613bda565b83811115613c01576000848401525b50505050565b6020815260008251806020840152613c26816040850160208701613bd7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008083601f840112613c6a57600080fd5b50813567ffffffffffffffff811115613c8257600080fd5b602083019150836020828501011115613c9a57600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613cf357613cf3613ca1565b60405290565b60405160e0810167ffffffffffffffff81118282101715613cf357613cf3613ca1565b6040805190810167ffffffffffffffff81118282101715613cf357613cf3613ca1565b63ffffffff811681146120a057600080fd5b80356136e381613d3f565b803560ff811681146136e357600080fd5b6000818303610140811215613d8157600080fd5b613d89613cd0565b915060e0811215613d9957600080fd5b50613da2613cf9565b823581526020830135613db481613d3f565b60208201526040830135613dc781613d3f565b60408201526060830135613dda81613d3f565b606082015260808301356bffffffffffffffffffffffff81168114613dfe57600080fd5b6080820152613e0f60a08401613b16565b60a082015260c083810135908201528152613e2c60e08301613d5c565b60208201526101008201356040820152613e496101208301613d51565b606082015292915050565b803580151581146136e357600080fd5b600080600080600080600080610200898b031215613e8157600080fd5b883567ffffffffffffffff811115613e9857600080fd5b613ea48b828c01613c58565b9099509750613eb890508a60208b01613d6d565b9550610160890135945061018089013593506101a0890135613ed981613d3f565b92506101c08901359150613ef06101e08a01613e54565b90509295985092959890939650565b600060208284031215613f1157600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613f7e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600060808201905063ffffffff808451168352806020850151166020840152806040850151166040840152506060830151613a786060840182613f47565b63ffffffff858116825284811660208301528316604082015260808101613fea6060830184613f47565b95945050505050565b60008060008060008060008060e0898b03121561400f57600080fd5b883567ffffffffffffffff81111561402657600080fd5b6140328b828c01613c58565b9099509750614045905060208a01613d5c565b9550604089013561405581613d3f565b9450606089013593506080890135925060a089013561407381613d3f565b9150613ef060c08a01613e54565b6000806000806101a0858703121561409857600080fd5b84359350602085013592506140b08660408701613d6d565b915061018085013567ffffffffffffffff8111156140cd57600080fd5b850161010081880312156140e057600080fd5b939692955090935050565b6000602082840312156140fd57600080fd5b81356121c181613d3f565b600080600080600060a0868803121561412057600080fd5b61412986613b16565b945061413760208701613b16565b94979496505050506040830135926060810135926080909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000826141c2576141c2614155565b500490565b600082198211156141da576141da614184565b500190565b60008160001904831182151516156141f9576141f9614184565b500290565b60008282101561421057614210614184565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261427957600080fd5b83018035915067ffffffffffffffff82111561429457600080fd5b602001915036819003821315613c9a57600080fd5b600080858511156142b957600080fd5b838611156142c657600080fd5b5050820193919092039150565b600084516142e5818460208901613bd7565b8201838582376000930192835250909392505050565b600060001982141561430f5761430f614184565b5060010190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60006101608083526143748184018688614316565b915050825180516020840152602081015163ffffffff808216604086015280604084015116606086015280606084015116608086015250506bffffffffffffffffffffffff60808201511660a084015273ffffffffffffffffffffffffffffffffffffffff60a08201511660c084015260c081015160e084015250602083015161440461010084018260ff169052565b50604083015161012083015260609092015163ffffffff166101409091015292915050565b60006020828403121561443b57600080fd5b81516121c181613d3f565b73ffffffffffffffffffffffffffffffffffffffff88811682528716602082015260ff8616604082015263ffffffff85811660608301528416608082015260c060a0820181905260009061449d9083018486614316565b9998505050505050505050565b6000602082840312156144bc57600080fd5b5051919050565b8183823760009101908152919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261450857600080fd5b83018035915067ffffffffffffffff82111561452357600080fd5b6020019150600581901b3603821315613c9a57600080fd5b600063ffffffff80831681851680830382111561455a5761455a614184565b01949350505050565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261459757600080fd5b9190910192915050565b600082601f8301126145b257600080fd5b6145ba613d1c565b8060408401858111156145cc57600080fd5b845b818110156145e65780358452602093840193016145ce565b509095945050505050565b60006080828403121561460357600080fd5b6040516040810181811067ffffffffffffffff8211171561462657614626613ca1565b60405261463384846145a1565b815261464284604085016145a1565b60208201529392505050565b600065ffffffffffff8083168185168183048111821515161561467357614673614184565b02949350505050565b60008151602080840160005b838110156146a457815187529582019590820190600101614688565b509495945050505050565b60006121c1828461467c565b6000826146ca576146ca614155565b500690565b60006146db828561467c565b9283525050602001919050565b6000604082840312156146fa57600080fd5b614702613d1c565b82358152602083013560208201528091505092915050565b803560208310156129c757600019602084900360031b1b1692915050565b600063ffffffff8084168061474f5761474f614155565b92169190910692915050565b600063ffffffff8084168061477257614772614155565b92169190910492915050565b600063ffffffff8083168185168183048111821515161561467357614673614184565b600063ffffffff838116908316818110156147be576147be614184565b039392505050565b600181815b808511156148015781600019048211156147e7576147e7614184565b808516156147f457918102915b93841c93908002906147cb565b509250929050565b600082614818575060016129c7565b81614825575060006129c7565b816001811461483b576002811461484557614861565b60019150506129c7565b60ff84111561485657614856614184565b50506001821b6129c7565b5060208310610133831016604e8410600b8410161715614884575081810a6129c7565b61488e83836147c6565b80600019048211156148a2576148a2614184565b029392505050565b60006121c1838361480956fe2d5f2860204f2060295f2d202d5f2860206f2060295f2d202d5f286020512060295f2d2042495444414f204a5553542052454b5420594f55207c5f2860204f2060295f7c202d207c5f2860206f2060295f7c202d207c5f286020512060295f7ca26469706673582212202353664493f7682447b40f86b668f76bbcc5e8f1c2111b51cb0da06405dd33fa64736f6c63430008090033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"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\":\"uint256\",\"name\":\"reRollupIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rollupBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"ReRollupBatchData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rollupBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rollupBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stratL2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endL2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"RollupStoreReverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BLOCK_STALE_MEASURE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRAUD_STRING\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"durationDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"globalDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"confirmer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreSearchData\",\"name\":\"searchData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"startL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"reConfirmedBatchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"name\":\"confirmData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dataManageAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"dataStoreIdToL2RollUpBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"dataStoreIdToRollupStoreNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fraudProofPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL2ConfirmedBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dataStoreId\",\"type\":\"uint32\"}],\"name\":\"getL2RollUpBlockByDataStoreId\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBL2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"internalType\":\"structBVM_EigenDataLayrChain.BatchRollupBlock\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL2StoredBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupBatchIndex\",\"type\":\"uint256\"}],\"name\":\"getRollupStoreByRollupBatchIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"confirmAt\",\"type\":\"uint32\"},{\"internalType\":\"enumBVM_EigenDataLayrChain.RollupStoreStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structBVM_EigenDataLayrChain.RollupStore\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_dataManageAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_reSubmitterAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_block_stale_measure\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fraudProofPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2SubmittedBlockNumber\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ConfirmedBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2StoredBlockNumber\",\"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\":\"bytes[]\",\"name\":\"polys\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"parse\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fraudulentStoreNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"durationDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"globalDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"confirmer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"internalType\":\"structIDataLayrServiceManager.DataStoreSearchData\",\"name\":\"searchData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"firstChunkNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes[]\",\"name\":\"polys\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"interpolationPoly\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"revealProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"zeroPoly\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"zeroPolyProof\",\"type\":\"bytes\"}],\"internalType\":\"structDataLayrDisclosureLogic.MultiRevealProof[]\",\"name\":\"multiRevealProofs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"polyEquivalenceProof\",\"type\":\"tuple\"}],\"internalType\":\"structBVM_EigenDataLayrChain.DisclosureProofs\",\"name\":\"disclosureProofs\",\"type\":\"tuple\"}],\"name\":\"proveFraud\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"reRollupBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reRollupIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reSubmitterAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"removeFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupBatchIndex\",\"type\":\"uint256\"}],\"name\":\"resetRollupBatchData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rollupBatchIndexRollupStores\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"originDataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"dataStoreId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"confirmAt\",\"type\":\"uint32\"},{\"internalType\":\"enumBVM_EigenDataLayrChain.RollupStoreStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"duration\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"startL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endL2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"totalOperatorsIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isReRollup\",\"type\":\"bool\"}],\"name\":\"storeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"submitReRollUpInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"unavailableFraudProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dataManageAddress\",\"type\":\"address\"}],\"name\":\"updateDataLayrManagerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fraudProofPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFraudProofPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2ConfirmedBlockNumber\",\"type\":\"uint256\"}],\"name\":\"updateL2ConfirmedBlockNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2StoredBlockNumber\",\"type\":\"uint256\"}],\"name\":\"updateL2StoredBlockNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_reSubmitterAddress\",\"type\":\"address\"}],\"name\":\"updateReSubmitterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"updateSequencerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50614cee806100206000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c8063758b814711610160578063afab4ac5116100d8578063f24950291161008c578063f2fde38b11610071578063f2fde38b146105cc578063f7db9795146105df578063ff2e0749146105f257600080fd5b8063f2495029146105a3578063f2a8f124146105c357600080fd5b8063c8fff01b116100bd578063c8fff01b14610546578063c96c0d3814610559578063d7fbc2e21461059057600080fd5b8063afab4ac514610513578063b537c4c71461052657600080fd5b8063927f20321161012f5780639495de40116101145780639495de40146104e4578063990fca66146104f75780639a71e29c1461050057600080fd5b8063927f20321461048c57806392f30a451461049557600080fd5b8063758b8147146104335780637bd85879146104535780638bea6cae146104665780638da5cb5b1461046e57600080fd5b80633c762984116101f35780635d42ffb7116101c25780635e8b3f2d116101a75780635e8b3f2d1461040f578063715018a614610418578063728cdbca1461042057600080fd5b80635d42ffb7146103f35780635e4a3056146103fc57600080fd5b80633c7629841461033857806346b2eb9b1461034157806359cb6391146103495780635c1bba38146103ae57600080fd5b80632e260ac31161024a5780632e72866b1161022f5780632e72866b146102f3578063301b39ab1461031357806332c58f7a1461032557600080fd5b80632e260ac3146102cd5780632e64b4c0146102e057600080fd5b806302d777de1461027c578063060ee9a4146102915780630a33202e146102915780631f944c8f146102a4575b600080fd5b61028f61028a366004613eca565b610612565b005b61028f61029f366004613eca565b6106eb565b6102b76102b2366004613ee5565b6107c4565b6040516102c49190613f97565b60405180910390f35b61028f6102db3660046141f4565b61092d565b61028f6102ee36600461428f565b610fb6565b61030661030136600461428f565b611048565b6040516102c49190614312565b609b545b6040519081526020016102c4565b61028f610333366004613eca565b611101565b610317609e5481565b6102b76111dd565b61039e61035736600461428f565b60a06020526000908152604090205463ffffffff80821691640100000000810482169168010000000000000000820416906c01000000000000000000000000900460ff1684565b6040516102c49493929190614350565b6097546103ce9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b610317609c5481565b61028f61040a366004614383565b6111f9565b610317609a5481565b61028f61151c565b61028f61042e366004614411565b611530565b6099546103ce9073ffffffffffffffffffffffffffffffffffffffff1681565b61028f610461366004614470565b611725565b609c54610317565b60335473ffffffffffffffffffffffffffffffffffffffff166103ce565b610317609f5481565b6104c76104a33660046144da565b60a16020526000908152604090208054600182015460029092015490919060ff1683565b6040805193845260208401929092521515908201526060016102c4565b61028f6104f236600461428f565b611e9e565b610317609b5481565b61028f61050e36600461428f565b611f30565b61028f610521366004613eca565b6120f2565b6103176105343660046144da565b60a26020526000908152604090205481565b61028f610554366004613eca565b6121c6565b61056c6105673660046144da565b61229a565b604080518251815260208084015190820152918101511515908201526060016102c4565b61028f61059e36600461428f565b612304565b6098546103ce9073ffffffffffffffffffffffffffffffffffffffff1681565b610317609d5481565b61028f6105da366004613eca565b612396565b61028f6105ed36600461428f565b612433565b61031761060036600461428f565b60a46020526000908152604090205481565b60975473ffffffffffffffffffffffffffffffffffffffff1633146106a45760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520646c60448201527f736d20616464726573730000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b609880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60975473ffffffffffffffffffffffffffffffffffffffff1633146107785760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e2072656d6f766520667260448201527f6175642070726f6f662061646472657373000000000000000000000000000000606482015260840161069b565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a36020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6060806000845b8483511015610921576000610846826107e5602082614555565b6107f0906001614569565b6107fb906020614581565b61080591906145a0565b855161081190896145a0565b848c8c88818110610824576108246145b7565b905060200281019061083691906145e6565b6108419291506145a0565b612523565b90508389898581811061085b5761085b6145b7565b905060200281019061086d91906145e6565b84906108798583614569565b926108869392919061464b565b60405160200161089893929190614675565b6040516020818303038152906040529350835186116108b75750610921565b8888848181106108c9576108c96145b7565b90506020028101906108db91906145e6565b90506108e78284614569565b141561090357826108f78161469d565b9350506001915061091b565b61090e816001614569565b6109189083614569565b91505b506107cb565b50909695505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146109ba5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79207468652073657175656e6365722063616e2073746f72652064617460448201527f6100000000000000000000000000000000000000000000000000000000000000606482015260840161069b565b855160409081015163ffffffff16600090815260a16020522054851480156109fd5750855160409081015163ffffffff16600090815260a1602052206001015484145b8015610a2b5750855160409081015163ffffffff16600090815260a1602052206002015460ff161515811515145b610ac35760405162461bcd60e51b815260206004820152605560248201527f446174612073746f72652065697468657220776173206e6f7420696e6974696160448201527f6c697a65642062792074686520726f6c6c757020636f6e74726163742c206f7260648201527f20697320616c726561647920636f6e6669726d65640000000000000000000000608482015260a40161069b565b855160409081015163ffffffff16600090815260a2602052205460001914610b795760405162461bcd60e51b815260206004820152605560248201527f446174612073746f72652065697468657220776173206e6f7420696e6974696160448201527f6c697a65642062792074686520726f6c6c757020636f6e74726163742c206f7260648201527f20697320616c726561647920636f6e6669726d65640000000000000000000000608482015260a40161069b565b6098546040517f5189951500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690635189951590610bd3908b908b908b90600401614701565b600060405180830381600087803b158015610bed57600080fd5b505af1158015610c01573d6000803e3d6000fd5b5050505080610deb5760408051608081018252875182015163ffffffff90811682528851830151166020820152609d549091820190610c409042614569565b63ffffffff16815260200160019052609e54600090815260a0602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115610d5657610d566142a8565b02179055505050609c849055609e8054875160409081015163ffffffff16600090815260a26020529081208290557fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f6729290610db08361469d565b909155508751604090810151815163ffffffff93841681529216602083015281018790526060810186905260800160405180910390a1610fac565b60405180608001604052808463ffffffff16815260200187600001516040015163ffffffff168152602001609d5442610e249190614569565b63ffffffff16815260200160019052600083815260a0602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115610f3757610f376142a8565b021790555050865160409081015163ffffffff908116600090815260a260209081529083902086905589518301518351878152921690820152908101879052606081018690527fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f672915060800160405180910390a15b5050505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146110435760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e20736574206c6174657360448201527f74206c3220626c6f636b206e756d626572000000000000000000000000000000606482015260840161069b565b609c55565b6110706040805160808101825260008082526020820181905291810182905290606082015290565b600082815260a060209081526040918290208251608081018452815463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316938101939093529060608301906c01000000000000000000000000900460ff1660028111156110e7576110e76142a8565b60028111156110f8576110f86142a8565b90525092915050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461118e5760405162461bcd60e51b815260206004820152603a60248201527f4f6e6c79207468652073657175656e6365722063616e2073657420667261756460448201527f2070726f6f66206164647265737320756e617661696c61626c65000000000000606482015260840161069b565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a36020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b604051806080016040528060608152602001614c596060913981565b60975473ffffffffffffffffffffffffffffffffffffffff1633146112865760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79207468652073657175656e6365722063616e2073746f72652064617460448201527f6100000000000000000000000000000000000000000000000000000000000000606482015260840161069b565b609a5461129963ffffffff8716436145a0565b106112e65760405162461bcd60e51b815260206004820152601e60248201527f7374616b65732074616b656e2066726f6d20746f6f206c6f6e672061676f0000604482015260640161069b565b609854604080517f72d18e8d000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916372d18e8d916004808301926020929190829003018186803b15801561135157600080fd5b505afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138991906147cb565b9050609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf49ea733308a8a888f8f6040518863ffffffff1660e01b81526004016113f297969594939291906147e8565b602060405180830381600087803b15801561140c57600080fd5b505af1158015611420573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144491906147cb565b5060408051606081018252868152602080820187815285151583850190815263ffffffff8616600090815260a18452858120945185559151600185015551600290930180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169315159390931790925560a29052206000199055816114ca57609b8490555b6040805163ffffffff83168152602081018790529081018590527fa99ca06ac3461399088feac88ec48dc5a47d61c3b6839eab20146f2c4ee535849060600160405180910390a1505050505050505050565b611524612558565b61152e60006125bf565b565b600054610100900460ff16158080156115505750600054600160ff909116105b8061156a5750303b15801561156a575060005460ff166001145b6115dc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161069b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561163a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b611642612636565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609880548984169083161790556099805492881692909116919091179055609a849055609d839055609b829055609c829055801561171c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b50505050505050565b33600090815260a3602052604090205460ff1615156001146117af5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c792066726175642070726f6f66207768697465206c6973742063616e2060448201527f6368616c6c656e67652064617461000000000000000000000000000000000000606482015260840161069b565b600084815260a0602090815260408083208151608081018352815463ffffffff8082168352640100000000820481169583019590955268010000000000000000810490941692810192909252909160608301906c01000000000000000000000000900460ff166002811115611826576118266142a8565b6002811115611837576118376142a8565b9052509050600181606001516002811115611854576118546142a8565b14801561186a575042816040015163ffffffff16115b6118dc5760405162461bcd60e51b815260206004820152602d60248201527f526f6c6c757053746f7265206d75737420626520636f6d6d697474656420616e60448201527f6420756e636f6e6669726d656400000000000000000000000000000000000000606482015260840161069b565b82516118e7906126bb565b6098546020850151604080870151606088015191517fed82c0ee00000000000000000000000000000000000000000000000000000000815260ff9093166004840152602483015263ffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091169063ed82c0ee9060640160206040518083038186803b15801561197357600080fd5b505afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab919061484c565b146119f85760405162461bcd60e51b815260206004820152601e60248201527f6d6574616461746120707265696d61676520697320696e636f72726563740000604482015260640161069b565b806020015163ffffffff1683600001516040015163ffffffff1614611aab5760405162461bcd60e51b815260206004820152604260248201527f7365616368446174612773206461746173746f7265206964206973206e6f742060448201527f636f6e73697374656e74207769746820676976656e20726f6c6c75702073746f60648201527f7265000000000000000000000000000000000000000000000000000000000000608482015260a40161069b565b611ab582806145e6565b604051611ac3929190614865565b60405190819003902083515114611b425760405162461bcd60e51b815260206004820152603260248201527f646973636c6f737572652070726f6f667320686561646572686173682070726560448201527f696d61676520697320696e636f72726563740000000000000000000000000000606482015260840161069b565b611b82611b4f83806145e6565b611b5f60408601602087016144da565b611b6c6040870187614875565b611b796060890189614875565b896080016127db565b611bce5760405162461bcd60e51b815260206004820152601d60248201527f646973636c6f737572652070726f6f66732061726520696e76616c6964000000604482015260640161069b565b6000611be2611bdd84806145e6565b612dd3565b905063ffffffff8116611bf86040850185614875565b9050611c0a60408601602087016144da565b63ffffffff16611c1a9190614569565b1115611c8e5760405162461bcd60e51b815260206004820152602e60248201527f43616e206f6e6c792070726f766520646174612066726f6d207468652073797360448201527f74656d61746963206368756e6b73000000000000000000000000000000000000606482015260840161069b565b6000611cc0611ca06040860186614875565b88604051806080016040528060608152602001614c5960609139516107c4565b9050604051806080016040528060608152602001614c596060913951815114611d775760405162461bcd60e51b815260206004820152604260248201527f50617273696e67206572726f722c2070726f76656e20737472696e672069732060448201527f646966666572656e74206c656e677468207468616e206672617564207374726960648201527f6e67000000000000000000000000000000000000000000000000000000000000608482015260a40161069b565b604051806080016040528060608152602001614c596060913980519060200120818051906020012014611dec5760405162461bcd60e51b815260206004820152601d60248201527f70726f76656e20737472696e6720213d20667261756420737472696e67000000604482015260640161069b565b600087815260a06020908152604080832080547fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff166c02000000000000000000000000179055875181015163ffffffff90811680855260a18452828520548a518401519092168552938290206001015482518c8152938401949094529082015260608101919091527fca227c67a02028763083580d42e8bdef4bb49c393068d05983421cd7a4a2a5be90608001611713565b60975473ffffffffffffffffffffffffffffffffffffffff163314611f2b5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79207468652073657175656e6365722063616e20736574206c6174657360448201527f74206c3220626c6f636b206e756d626572000000000000000000000000000000606482015260840161069b565b609b55565b60995473ffffffffffffffffffffffffffffffffffffffff163314611fbd5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c7920746865207265207375626d69747465722063616e207375626d697460448201527f20726520726f6c6c757020646174610000000000000000000000000000000000606482015260840161069b565b600081815260a0602090815260408083208151608081018352815463ffffffff8082168352640100000000820481169583019590955268010000000000000000810490941692810192909252909160608301906c01000000000000000000000000900460ff166002811115612034576120346142a8565b6002811115612045576120456142a8565b905250602081015190915063ffffffff16156120ee57609f8054600090815260a46020526040812084905581547fee84ab0752d66e31e484f6855689d7067ecd900a6c5a198a2908f74e583e7d5792909161209f8361469d565b909155506020838101805163ffffffff908116600090815260a1845260408082205493519092168152819020600101548151948552928401879052830152606082015260800160405180910390a15b5050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461217f5760405162461bcd60e51b815260206004820152603260248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520726560448201527f207375626d697474657220616464726573730000000000000000000000000000606482015260840161069b565b609980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60975473ffffffffffffffffffffffffffffffffffffffff1633146122535760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520736560448201527f7175656e63657220616464726573730000000000000000000000000000000000606482015260840161069b565b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6122c0604051806060016040528060008152602001600081526020016000151581525090565b5063ffffffff16600090815260a160209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b60975473ffffffffffffffffffffffffffffffffffffffff1633146123915760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520667260448201527f6175642070726f6f6620706572696f6400000000000000000000000000000000606482015260840161069b565b609d55565b61239e612558565b73ffffffffffffffffffffffffffffffffffffffff81166124275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161069b565b612430816125bf565b50565b60975473ffffffffffffffffffffffffffffffffffffffff1633146124c05760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c79207468652073657175656e6365722063616e2075706461746520736560448201527f7175656e63657220616464726573730000000000000000000000000000000000606482015260840161069b565b60005b609e5481101561251357600081815260a06020526040902080547fffffffffffffffffffffffffffffffffffffff000000000000000000000000001690558061250b8161469d565b9150506124c3565b50609e556001609b819055609c55565b600082841061253f57818310612539578161254e565b8261254e565b81841061254c578161254e565b835b90505b9392505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331461152e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161069b565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166126b35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161069b565b61152e612de2565b600080826000015183602001518460400151856060015186608001518760a001518860c0015160405160200161279e979695949392919096875260e095861b7fffffffff00000000000000000000000000000000000000000000000000000000908116602089015294861b851660248801529290941b909216602885015260a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016602c84015260609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166038830152604c820152606c0190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209392505050565b6000808567ffffffffffffffff8111156127f7576127f7614031565b604051908082528060200260200182016040528015612820578160200160208202803683370190505b50905060006128ad8b8b6040805160c08101825260006080820181815260a0830182905282526020820181905291810182905260608101919091525050604080518082018252823581526020838101358183015282516080810184529182528383013560e090811c918301919091526044840135811c92820192909252604890920135901c606082015290565b90508460005b81811015612b8c57612983836128c9838e6148dd565b8a8a858181106128db576128db6145b7565b90506020028101906128ed9190614905565b8b8b868181106128ff576128ff6145b7565b90506020028101906129119190614905565b6040018c8c87818110612926576129266145b7565b90506020028101906129389190614905565b60800180360381019061294b9190614993565b8d8d8881811061295d5761295d6145b7565b905060200281019061296f9190614905565b61297e906101008101906145e6565b612e68565b6129f55760405162461bcd60e51b815260206004820152602260248201527f52657665616c206661696c65642064756520746f206e6f6e203120706169726960448201527f6e67000000000000000000000000000000000000000000000000000000000000606482015260840161069b565b898982818110612a0757612a076145b7565b9050602002810190612a1991906145e6565b905083602001516020612a2c91906149f0565b65ffffffffffff1614612aa75760405162461bcd60e51b815260206004820152603860248201527f506f6c796e6f6d69616c206d757374206861766520612032353620626974206360448201527f6f656666696369656e7420666f722065616368207465726d0000000000000000606482015260840161069b565b898982818110612ab957612ab96145b7565b9050602002810190612acb91906145e6565b604051612ad9929190614865565b6040518091039020888883818110612af357612af36145b7565b9050602002810190612b059190614905565b35898984818110612b1857612b186145b7565b9050602002810190612b2a9190614905565b604051612b5193929160209081013591019283526020830191909152604082015260600190565b60405160208183030381529060405280519060200120848281518110612b7957612b796145b7565b60209081029190910101526001016128b3565b5060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184604051602001612bc19190614a51565b6040516020818303038152906040528051906020012060001c612be49190614a5d565b9050612bee613e0f565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001856000604051602001612c23929190614a71565b6040516020818303038152906040528051906020012060001c612c469190614a5d565b8082526020820152600089898281612c6057612c606145b7565b9050602002810190612c729190614905565b612c829036819003810190614a8a565b90506000612cb48d8d6000818110612c9c57612c9c6145b7565b9050602002810190612cae91906145e6565b86613070565b905060015b8a811015612db157612d0b83612d068e8e85818110612cda57612cda6145b7565b9050602002810190612cec9190614905565b612cfc9036819003810190614a8a565b6020880151613116565b6131ac565b92506000612d3c8f8f84818110612d2457612d246145b7565b9050602002810190612d3691906145e6565b88613070565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828760016020020151098408602086015186519194507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001910960208601525080612da98161469d565b915050612cb9565b50612dbe828a8684613248565b97505050505050505098975050505050505050565b604482013560e01c5b92915050565b600054610100900460ff16612e5f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161069b565b61152e336125bf565b825160208082015191518186015180830151905160408051948501959095529383019190915260608201526080810191909152600090612f259060a00160405160208183030381529060405280519060200120612ece898b604001518c606001516133d7565b63ffffffff16612ee98b6020015165ffffffffffff16613543565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061384392505050565b612f715760405162461bcd60e51b815260206004820181905260248201527f496e636f7272656374207a65726f20706f6c79206d65726b6c652070726f6f66604482015260640161069b565b8751600090612f9190612d06612f8c368b90038b018b614a8a565b6139b9565b604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290915061306261305a36899003890189614a8a565b878484613a78565b9a9950505050505050505050565b600080836001825b8281101561310a576000888289613090826020614569565b9261309d9392919061464b565b6130a691614abc565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180848309860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018784099250613102602083614569565b915050613078565b50919695505050505050565b6040805180820190915260008082526020820152613132613e2d565b83518152602080850151908201526040808201849052600090836060846007600019fa9050806131a45760405162461bcd60e51b815260206004820152601060248201527f626e3235342d6d756c2d6661696c656400000000000000000000000000000000604482015260640161069b565b505092915050565b60408051808201909152600080825260208201526131c8613e4b565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050806131a45760405162461bcd60e51b815260206004820152601060248201527f626e3235342d6164642d6661696c656400000000000000000000000000000000604482015260640161069b565b6040805180820190915260018152600260208201526000908161327361326d836139b9565b86613116565b604080518082019091527f220ac48bb1f91fd93f502a3d0caa077ac70e0af8819b9d8fa26a168a2c558a5781527f08f54b82af08ceaf7cd5f180bac94870f6d8100a9c9afa9dd09a44916538911260208201529091506132d381836131ac565b915060006132e96132e3856139b9565b87613116565b905060006132f78a836131ac565b604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d6020838101919091528101919091529091506133c8856133c1368d90038d018d614993565b8484613a78565b9b9a5050505050505050505050565b6000806133e483856148dd565b905060006133f78563ffffffff16613ce5565b905060006134058684614ada565b63ffffffff161561341757600161341a565b60005b60ff166134278785614afd565b61343191906148dd565b9050600061344d6134428385614b20565b63ffffffff16613ce5565b90508663ffffffff168863ffffffff16101561348f578061346e828a613d12565b61347a90610100614b20565b6134849190614afd565b945050505050612551565b6134998784614b43565b6134a39082614b43565b63ffffffff168863ffffffff1610156134d5578061346e81856134c68b8d614b43565b6134d091906148dd565b613d12565b60405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420637265617465206e756d626572206f66206672616d6520686960448201527f67686572207468616e20706f737369626c650000000000000000000000000000606482015260840161069b565b60008061354f83613d51565b90508061357e57507fe82cea94884b1b895ea0742840a3b19249a723810fd1b04d8564d675b0a416f192915050565b80600114156135af57507f4843774a80fc8385b31024f5bd18b42e62de439206ab9468d42d826796d41f6792915050565b80600214156135e057507f092d3e5f87f5293e7ab0cc2ca6b0b5e4adb5e0011656544915f7cea34e69e5ab92915050565b806003141561361157507f494b208540ec8624fbbb3f2c64ffccdaf6253f8f4e50c0d93922d88195b0775592915050565b806004141561364257507ffdb44b84a82893cfa0e37a97f09ffc4298ad5e62be1bea1d03320ae836213d2292915050565b806005141561367357507f3f50cb08231d2a76853ba9dbb20dad45a1b75c57cdaff6223bfe069752cff3d492915050565b80600614156136a457507fbb39eebd8138eefd5802a49d571e65b3e0d4e32277c28fbf5fbca66e7fb0431092915050565b80600714156136d557507ff0a39b513e11fa80cbecbf352f69310eddd5cd03148768e0e9542bd600b133ec92915050565b806008141561370657507f038cca2238865414efb752cc004fffec9e6069b709f495249cdf36efbd5952f692915050565b806009141561373757507f2a26b054ed559dd255d8ac9060ebf6b95b768d87de767f8174ad2f9a4e48dd0192915050565b80600a141561376857507f1fe180d0bc4ff7c69fefa595b3b5f3c284535a280f6fdcf69b20770d1e20e1fc92915050565b80600b141561379957507f60e34ad57c61cd6fdd8177437c30e4a30334e63d7683989570cf27020efc820192915050565b80600c14156137ca57507feda2417e770ddbe88f083acf06b6794dfb76301314a32bd0697440d76f6cd9cc92915050565b80600d14156137fb57507f8cbe9b8cf92ce70e3bec8e1e72a0f85569017a7e43c3db50e4a5badb8dea7ce892915050565b60405162461bcd60e51b815260206004820152601660248201527f4c6f67206e6f7420696e2076616c69642072616e676500000000000000000000604482015260640161069b565b6000602082516138539190614a5d565b156138a05760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e677468000000000000000000000000604482015260640161069b565b6000602083516138b09190614555565b90506138bd816002614c4c565b851061390b5760405162461bcd60e51b815260206004820152601560248201527f4c65616620696e64657820697320746f6f206269670000000000000000000000604482015260640161069b565b60008660205b855181116139ab5785810151925061392a600289614a5d565b61395f57604080516020810184905290810184905260600160405160208183030381529060405280519060200120915061398c565b60408051602081018590529081018390526060016040516020818303038152906040528051906020012091505b613997600289614555565b97506139a4602082614569565b9050613911565b509094149695505050505050565b604080518082019091526000808252602082015281511580156139de57506020820151155b156139fc575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478460200151613a419190614a5d565b613a6b907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476145a0565b905292915050565b919050565b604080518082018252858152602080820185905282518084019093528583528201839052600091613aa7613e69565b60005b6002811015613c6c576000613ac0826006614581565b9050848260028110613ad457613ad46145b7565b60200201515183613ae6836000614569565b600c8110613af657613af66145b7565b6020020152848260028110613b0d57613b0d6145b7565b60200201516020015183826001613b249190614569565b600c8110613b3457613b346145b7565b6020020152838260028110613b4b57613b4b6145b7565b6020020151515183613b5e836002614569565b600c8110613b6e57613b6e6145b7565b6020020152838260028110613b8557613b856145b7565b6020020151516001602002015183613b9e836003614569565b600c8110613bae57613bae6145b7565b6020020152838260028110613bc557613bc56145b7565b602002015160200151600060028110613be057613be06145b7565b602002015183613bf1836004614569565b600c8110613c0157613c016145b7565b6020020152838260028110613c1857613c186145b7565b602002015160200151600160028110613c3357613c336145b7565b602002015183613c44836005614569565b600c8110613c5457613c546145b7565b60200201525080613c648161469d565b915050613aaa565b50613c75613e88565b60006020826101808560086107d05a03fa905080613cd55760405162461bcd60e51b815260206004820152601460248201527f626e3235342d70616972696e672d6661696c6564000000000000000000000000604482015260640161069b565b5051151598975050505050505050565b600060015b82816001901b1015613d085780613d008161469d565b915050613cea565b6001901b92915050565b600080613d248463ffffffff16613d51565b613d2f906020614b43565b90508063ffffffff16613d4184613dc1565b63ffffffff16901c949350505050565b6000808211613da25760405162461bcd60e51b815260206004820152601360248201527f4c6f67206d75737420626520646566696e656400000000000000000000000000604482015260640161069b565b60005b600183821c14612ddc5780613db98161469d565b915050613da5565b600080805b6020811015613e08576001811b84811663ffffffff1615613df557613dec82601f6145a0565b6001901b831792505b5080613e008161469d565b915050613dc6565b5092915050565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114613a7357600080fd5b600060208284031215613edc57600080fd5b61255182613ea6565b60008060008060608587031215613efb57600080fd5b843567ffffffffffffffff80821115613f1357600080fd5b818701915087601f830112613f2757600080fd5b813581811115613f3657600080fd5b8860208260051b8501011115613f4b57600080fd5b6020928301999098509187013596604001359550909350505050565b60005b83811015613f82578181015183820152602001613f6a565b83811115613f91576000848401525b50505050565b6020815260008251806020840152613fb6816040850160208701613f67565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008083601f840112613ffa57600080fd5b50813567ffffffffffffffff81111561401257600080fd5b60208301915083602082850101111561402a57600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561408357614083614031565b60405290565b60405160e0810167ffffffffffffffff8111828210171561408357614083614031565b6040805190810167ffffffffffffffff8111828210171561408357614083614031565b63ffffffff8116811461243057600080fd5b8035613a73816140cf565b803560ff81168114613a7357600080fd5b600081830361014081121561411157600080fd5b614119614060565b915060e081121561412957600080fd5b50614132614089565b823581526020830135614144816140cf565b60208201526040830135614157816140cf565b6040820152606083013561416a816140cf565b606082015260808301356bffffffffffffffffffffffff8116811461418e57600080fd5b608082015261419f60a08401613ea6565b60a082015260c0838101359082015281526141bc60e083016140ec565b602082015261010082013560408201526141d961012083016140e1565b606082015292915050565b80358015158114613a7357600080fd5b600080600080600080600080610200898b03121561421157600080fd5b883567ffffffffffffffff81111561422857600080fd5b6142348b828c01613fe8565b909950975061424890508a60208b016140fd565b9550610160890135945061018089013593506101a0890135614269816140cf565b92506101c089013591506142806101e08a016141e4565b90509295985092959890939650565b6000602082840312156142a157600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061430e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600060808201905063ffffffff808451168352806020850151166020840152806040850151166040840152506060830151613e0860608401826142d7565b63ffffffff85811682528481166020830152831660408201526080810161437a60608301846142d7565b95945050505050565b60008060008060008060008060e0898b03121561439f57600080fd5b883567ffffffffffffffff8111156143b657600080fd5b6143c28b828c01613fe8565b90995097506143d5905060208a016140ec565b955060408901356143e5816140cf565b9450606089013593506080890135925060a0890135614403816140cf565b915061428060c08a016141e4565b60008060008060008060c0878903121561442a57600080fd5b61443387613ea6565b955061444160208801613ea6565b945061444f60408801613ea6565b9350606087013592506080870135915060a087013590509295509295509295565b6000806000806101a0858703121561448757600080fd5b843593506020850135925061449f86604087016140fd565b915061018085013567ffffffffffffffff8111156144bc57600080fd5b850161010081880312156144cf57600080fd5b939692955090935050565b6000602082840312156144ec57600080fd5b8135612551816140cf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082614564576145646144f7565b500490565b6000821982111561457c5761457c614526565b500190565b600081600019048311821515161561459b5761459b614526565b500290565b6000828210156145b2576145b2614526565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261461b57600080fd5b83018035915067ffffffffffffffff82111561463657600080fd5b60200191503681900382131561402a57600080fd5b6000808585111561465b57600080fd5b8386111561466857600080fd5b5050820193919092039150565b60008451614687818460208901613f67565b8201838582376000930192835250909392505050565b60006000198214156146b1576146b1614526565b5060010190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061016080835261471681840186886146b8565b915050825180516020840152602081015163ffffffff808216604086015280604084015116606086015280606084015116608086015250506bffffffffffffffffffffffff60808201511660a084015273ffffffffffffffffffffffffffffffffffffffff60a08201511660c084015260c081015160e08401525060208301516147a661010084018260ff169052565b50604083015161012083015260609092015163ffffffff166101409091015292915050565b6000602082840312156147dd57600080fd5b8151612551816140cf565b73ffffffffffffffffffffffffffffffffffffffff88811682528716602082015260ff8616604082015263ffffffff85811660608301528416608082015260c060a0820181905260009061483f90830184866146b8565b9998505050505050505050565b60006020828403121561485e57600080fd5b5051919050565b8183823760009101908152919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126148aa57600080fd5b83018035915067ffffffffffffffff8211156148c557600080fd5b6020019150600581901b360382131561402a57600080fd5b600063ffffffff8083168185168083038211156148fc576148fc614526565b01949350505050565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261493957600080fd5b9190910192915050565b600082601f83011261495457600080fd5b61495c6140ac565b80604084018581111561496e57600080fd5b845b81811015614988578035845260209384019301614970565b509095945050505050565b6000608082840312156149a557600080fd5b6040516040810181811067ffffffffffffffff821117156149c8576149c8614031565b6040526149d58484614943565b81526149e48460408501614943565b60208201529392505050565b600065ffffffffffff80831681851681830481118215151615614a1557614a15614526565b02949350505050565b60008151602080840160005b83811015614a4657815187529582019590820190600101614a2a565b509495945050505050565b60006125518284614a1e565b600082614a6c57614a6c6144f7565b500690565b6000614a7d8285614a1e565b9283525050602001919050565b600060408284031215614a9c57600080fd5b614aa46140ac565b82358152602083013560208201528091505092915050565b80356020831015612ddc57600019602084900360031b1b1692915050565b600063ffffffff80841680614af157614af16144f7565b92169190910692915050565b600063ffffffff80841680614b1457614b146144f7565b92169190910492915050565b600063ffffffff80831681851681830481118215151615614a1557614a15614526565b600063ffffffff83811690831681811015614b6057614b60614526565b039392505050565b600181815b80851115614ba3578160001904821115614b8957614b89614526565b80851615614b9657918102915b93841c9390800290614b6d565b509250929050565b600082614bba57506001612ddc565b81614bc757506000612ddc565b8160018114614bdd5760028114614be757614c03565b6001915050612ddc565b60ff841115614bf857614bf8614526565b50506001821b612ddc565b5060208310610133831016604e8410600b8410161715614c26575081810a612ddc565b614c308383614b68565b8060001904821115614c4457614c44614526565b029392505050565b60006125518383614bab56fe2d5f2860204f2060295f2d202d5f2860206f2060295f2d202d5f286020512060295f2d2042495444414f204a5553542052454b5420594f55207c5f2860204f2060295f7c202d207c5f2860206f2060295f7c202d207c5f286020512060295f7ca2646970667358221220f288ef9921d4a2e080d92dc0f4c3dd7d0d89d8fd805a9c667dc48f9275b219bd64736f6c63430008090033", } // BVMEigenDataLayrChainABI is the input ABI used to generate the binding from. @@ -686,6 +686,99 @@ func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) Owner() (commo return _BVMEigenDataLayrChain.Contract.Owner(&_BVMEigenDataLayrChain.CallOpts) } +// ReRollupBatchIndex is a free data retrieval call binding the contract method 0xff2e0749. +// +// Solidity: function reRollupBatchIndex(uint256 ) view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) ReRollupBatchIndex(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "reRollupBatchIndex", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ReRollupBatchIndex is a free data retrieval call binding the contract method 0xff2e0749. +// +// Solidity: function reRollupBatchIndex(uint256 ) view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) ReRollupBatchIndex(arg0 *big.Int) (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.ReRollupBatchIndex(&_BVMEigenDataLayrChain.CallOpts, arg0) +} + +// ReRollupBatchIndex is a free data retrieval call binding the contract method 0xff2e0749. +// +// Solidity: function reRollupBatchIndex(uint256 ) view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) ReRollupBatchIndex(arg0 *big.Int) (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.ReRollupBatchIndex(&_BVMEigenDataLayrChain.CallOpts, arg0) +} + +// ReRollupIndex is a free data retrieval call binding the contract method 0x927f2032. +// +// Solidity: function reRollupIndex() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) ReRollupIndex(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "reRollupIndex") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ReRollupIndex is a free data retrieval call binding the contract method 0x927f2032. +// +// Solidity: function reRollupIndex() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) ReRollupIndex() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.ReRollupIndex(&_BVMEigenDataLayrChain.CallOpts) +} + +// ReRollupIndex is a free data retrieval call binding the contract method 0x927f2032. +// +// Solidity: function reRollupIndex() view returns(uint256) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) ReRollupIndex() (*big.Int, error) { + return _BVMEigenDataLayrChain.Contract.ReRollupIndex(&_BVMEigenDataLayrChain.CallOpts) +} + +// ReSubmitterAddress is a free data retrieval call binding the contract method 0x758b8147. +// +// Solidity: function reSubmitterAddress() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCaller) ReSubmitterAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BVMEigenDataLayrChain.contract.Call(opts, &out, "reSubmitterAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ReSubmitterAddress is a free data retrieval call binding the contract method 0x758b8147. +// +// Solidity: function reSubmitterAddress() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) ReSubmitterAddress() (common.Address, error) { + return _BVMEigenDataLayrChain.Contract.ReSubmitterAddress(&_BVMEigenDataLayrChain.CallOpts) +} + +// ReSubmitterAddress is a free data retrieval call binding the contract method 0x758b8147. +// +// Solidity: function reSubmitterAddress() view returns(address) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainCallerSession) ReSubmitterAddress() (common.Address, error) { + return _BVMEigenDataLayrChain.Contract.ReSubmitterAddress(&_BVMEigenDataLayrChain.CallOpts) +} + // RollupBatchIndex is a free data retrieval call binding the contract method 0x3c762984. // // Solidity: function rollupBatchIndex() view returns(uint256) @@ -824,25 +917,25 @@ func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) ConfirmDat return _BVMEigenDataLayrChain.Contract.ConfirmData(&_BVMEigenDataLayrChain.TransactOpts, data, searchData, startL2Block, endL2Block, originDataStoreId, reConfirmedBatchIndex, isReRollup) } -// Initialize is a paid mutator transaction binding the contract method 0xd13f90b4. +// Initialize is a paid mutator transaction binding the contract method 0x728cdbca. // -// Solidity: function initialize(address _sequencer, address _dataManageAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() -func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) Initialize(opts *bind.TransactOpts, _sequencer common.Address, _dataManageAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { - return _BVMEigenDataLayrChain.contract.Transact(opts, "initialize", _sequencer, _dataManageAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) +// Solidity: function initialize(address _sequencer, address _dataManageAddress, address _reSubmitterAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) Initialize(opts *bind.TransactOpts, _sequencer common.Address, _dataManageAddress common.Address, _reSubmitterAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "initialize", _sequencer, _dataManageAddress, _reSubmitterAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) } -// Initialize is a paid mutator transaction binding the contract method 0xd13f90b4. +// Initialize is a paid mutator transaction binding the contract method 0x728cdbca. // -// Solidity: function initialize(address _sequencer, address _dataManageAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() -func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) Initialize(_sequencer common.Address, _dataManageAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { - return _BVMEigenDataLayrChain.Contract.Initialize(&_BVMEigenDataLayrChain.TransactOpts, _sequencer, _dataManageAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) +// Solidity: function initialize(address _sequencer, address _dataManageAddress, address _reSubmitterAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) Initialize(_sequencer common.Address, _dataManageAddress common.Address, _reSubmitterAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.Initialize(&_BVMEigenDataLayrChain.TransactOpts, _sequencer, _dataManageAddress, _reSubmitterAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) } -// Initialize is a paid mutator transaction binding the contract method 0xd13f90b4. +// Initialize is a paid mutator transaction binding the contract method 0x728cdbca. // -// Solidity: function initialize(address _sequencer, address _dataManageAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() -func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) Initialize(_sequencer common.Address, _dataManageAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { - return _BVMEigenDataLayrChain.Contract.Initialize(&_BVMEigenDataLayrChain.TransactOpts, _sequencer, _dataManageAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) +// Solidity: function initialize(address _sequencer, address _dataManageAddress, address _reSubmitterAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) Initialize(_sequencer common.Address, _dataManageAddress common.Address, _reSubmitterAddress common.Address, _block_stale_measure *big.Int, _fraudProofPeriod *big.Int, _l2SubmittedBlockNumber *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.Initialize(&_BVMEigenDataLayrChain.TransactOpts, _sequencer, _dataManageAddress, _reSubmitterAddress, _block_stale_measure, _fraudProofPeriod, _l2SubmittedBlockNumber) } // Parse is a paid mutator transaction binding the contract method 0x1f944c8f. @@ -992,6 +1085,27 @@ func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) StoreData( return _BVMEigenDataLayrChain.Contract.StoreData(&_BVMEigenDataLayrChain.TransactOpts, header, duration, blockNumber, startL2Block, endL2Block, totalOperatorsIndex, isReRollup) } +// SubmitReRollUpInfo is a paid mutator transaction binding the contract method 0x9a71e29c. +// +// Solidity: function submitReRollUpInfo(uint256 batchIndex) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) SubmitReRollUpInfo(opts *bind.TransactOpts, batchIndex *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "submitReRollUpInfo", batchIndex) +} + +// SubmitReRollUpInfo is a paid mutator transaction binding the contract method 0x9a71e29c. +// +// Solidity: function submitReRollUpInfo(uint256 batchIndex) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) SubmitReRollUpInfo(batchIndex *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.SubmitReRollUpInfo(&_BVMEigenDataLayrChain.TransactOpts, batchIndex) +} + +// SubmitReRollUpInfo is a paid mutator transaction binding the contract method 0x9a71e29c. +// +// Solidity: function submitReRollUpInfo(uint256 batchIndex) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) SubmitReRollUpInfo(batchIndex *big.Int) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.SubmitReRollUpInfo(&_BVMEigenDataLayrChain.TransactOpts, batchIndex) +} + // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // // Solidity: function transferOwnership(address newOwner) returns() @@ -1118,6 +1232,27 @@ func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) UpdateL2St return _BVMEigenDataLayrChain.Contract.UpdateL2StoredBlockNumber(&_BVMEigenDataLayrChain.TransactOpts, _l2StoredBlockNumber) } +// UpdateReSubmitterAddress is a paid mutator transaction binding the contract method 0xafab4ac5. +// +// Solidity: function updateReSubmitterAddress(address _reSubmitterAddress) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactor) UpdateReSubmitterAddress(opts *bind.TransactOpts, _reSubmitterAddress common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.contract.Transact(opts, "updateReSubmitterAddress", _reSubmitterAddress) +} + +// UpdateReSubmitterAddress is a paid mutator transaction binding the contract method 0xafab4ac5. +// +// Solidity: function updateReSubmitterAddress(address _reSubmitterAddress) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainSession) UpdateReSubmitterAddress(_reSubmitterAddress common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateReSubmitterAddress(&_BVMEigenDataLayrChain.TransactOpts, _reSubmitterAddress) +} + +// UpdateReSubmitterAddress is a paid mutator transaction binding the contract method 0xafab4ac5. +// +// Solidity: function updateReSubmitterAddress(address _reSubmitterAddress) returns() +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainTransactorSession) UpdateReSubmitterAddress(_reSubmitterAddress common.Address) (*types.Transaction, error) { + return _BVMEigenDataLayrChain.Contract.UpdateReSubmitterAddress(&_BVMEigenDataLayrChain.TransactOpts, _reSubmitterAddress) +} + // UpdateSequencerAddress is a paid mutator transaction binding the contract method 0xc8fff01b. // // Solidity: function updateSequencerAddress(address _sequencer) returns() @@ -1426,6 +1561,143 @@ func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) ParseOwnershipTrans return event, nil } +// BVMEigenDataLayrChainReRollupBatchDataIterator is returned from FilterReRollupBatchData and is used to iterate over the raw logs and unpacked data for ReRollupBatchData events raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainReRollupBatchDataIterator struct { + Event *BVMEigenDataLayrChainReRollupBatchData // 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 *BVMEigenDataLayrChainReRollupBatchDataIterator) 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(BVMEigenDataLayrChainReRollupBatchData) + 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(BVMEigenDataLayrChainReRollupBatchData) + 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 *BVMEigenDataLayrChainReRollupBatchDataIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BVMEigenDataLayrChainReRollupBatchDataIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BVMEigenDataLayrChainReRollupBatchData represents a ReRollupBatchData event raised by the BVMEigenDataLayrChain contract. +type BVMEigenDataLayrChainReRollupBatchData struct { + ReRollupIndex *big.Int + RollupBatchIndex *big.Int + StratL2BlockNumber *big.Int + EndL2BlockNumber *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReRollupBatchData is a free log retrieval operation binding the contract event 0xee84ab0752d66e31e484f6855689d7067ecd900a6c5a198a2908f74e583e7d57. +// +// Solidity: event ReRollupBatchData(uint256 reRollupIndex, uint256 rollupBatchIndex, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) FilterReRollupBatchData(opts *bind.FilterOpts) (*BVMEigenDataLayrChainReRollupBatchDataIterator, error) { + + logs, sub, err := _BVMEigenDataLayrChain.contract.FilterLogs(opts, "ReRollupBatchData") + if err != nil { + return nil, err + } + return &BVMEigenDataLayrChainReRollupBatchDataIterator{contract: _BVMEigenDataLayrChain.contract, event: "ReRollupBatchData", logs: logs, sub: sub}, nil +} + +// WatchReRollupBatchData is a free log subscription operation binding the contract event 0xee84ab0752d66e31e484f6855689d7067ecd900a6c5a198a2908f74e583e7d57. +// +// Solidity: event ReRollupBatchData(uint256 reRollupIndex, uint256 rollupBatchIndex, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) WatchReRollupBatchData(opts *bind.WatchOpts, sink chan<- *BVMEigenDataLayrChainReRollupBatchData) (event.Subscription, error) { + + logs, sub, err := _BVMEigenDataLayrChain.contract.WatchLogs(opts, "ReRollupBatchData") + 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(BVMEigenDataLayrChainReRollupBatchData) + if err := _BVMEigenDataLayrChain.contract.UnpackLog(event, "ReRollupBatchData", 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 +} + +// ParseReRollupBatchData is a log parse operation binding the contract event 0xee84ab0752d66e31e484f6855689d7067ecd900a6c5a198a2908f74e583e7d57. +// +// Solidity: event ReRollupBatchData(uint256 reRollupIndex, uint256 rollupBatchIndex, uint256 stratL2BlockNumber, uint256 endL2BlockNumber) +func (_BVMEigenDataLayrChain *BVMEigenDataLayrChainFilterer) ParseReRollupBatchData(log types.Log) (*BVMEigenDataLayrChainReRollupBatchData, error) { + event := new(BVMEigenDataLayrChainReRollupBatchData) + if err := _BVMEigenDataLayrChain.contract.UnpackLog(event, "ReRollupBatchData", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // BVMEigenDataLayrChainRollupStoreConfirmedIterator is returned from FilterRollupStoreConfirmed and is used to iterate over the raw logs and unpacked data for RollupStoreConfirmed events raised by the BVMEigenDataLayrChain contract. type BVMEigenDataLayrChainRollupStoreConfirmedIterator struct { Event *BVMEigenDataLayrChainRollupStoreConfirmed // Event containing the contract specifics and raw log diff --git a/mt-challenger/challenger/challenger.go b/mt-challenger/challenger/challenger.go index 1091db866..56c7b3f46 100644 --- a/mt-challenger/challenger/challenger.go +++ b/mt-challenger/challenger/challenger.go @@ -5,8 +5,6 @@ import ( "context" "crypto/ecdsa" "encoding/hex" - "encoding/json" - "fmt" datalayr "github.com/Layr-Labs/datalayr/common/contracts" gkzg "github.com/Layr-Labs/datalayr/common/crypto/go-kzg-bn254" "github.com/Layr-Labs/datalayr/common/graphView" @@ -18,20 +16,23 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" "github.com/mantlenetworkio/mantle/l2geth/common" l2types "github.com/mantlenetworkio/mantle/l2geth/core/types" l2ethclient "github.com/mantlenetworkio/mantle/l2geth/ethclient" - "github.com/mantlenetworkio/mantle/l2geth/log" l2rlp "github.com/mantlenetworkio/mantle/l2geth/rlp" "github.com/mantlenetworkio/mantle/l2geth/rollup/eigenda" + common4 "github.com/mantlenetworkio/mantle/mt-batcher/services/common" "github.com/mantlenetworkio/mantle/mt-batcher/txmgr" "github.com/mantlenetworkio/mantle/mt-challenger/bindings" rc "github.com/mantlenetworkio/mantle/mt-challenger/bindings" + "github.com/mantlenetworkio/mantle/mt-challenger/challenger/db" "github.com/pkg/errors" "github.com/shurcooL/graphql" "google.golang.org/grpc" "math/big" + "strconv" "strings" "sync" "time" @@ -74,17 +75,25 @@ type FraudProof struct { } type ChallengerConfig struct { - L1Client *ethclient.Client - L2Client *l2ethclient.Client - EigenContractAddr ethc.Address - Logger *logging.Logger - PrivKey *ecdsa.PrivateKey - GraphProvider string - RetrieverSocket string - KzgConfig KzgConfig - LastStoreNumber uint64 - Timeout time.Duration - SignerFn SignerFn + L1Client *ethclient.Client + L2Client *l2ethclient.Client + EigenContractAddr ethc.Address + Logger *logging.Logger + PrivKey *ecdsa.PrivateKey + GraphProvider string + RetrieverSocket string + KzgConfig KzgConfig + LastStoreNumber uint64 + Timeout time.Duration + PollInterval time.Duration + DbPath string + CheckerBatchIndex uint64 + NeedReRollupBatch string + ReRollupToolEnable bool + SignerFn SignerFn + ResubmissionTimeout time.Duration + NumConfirmations uint64 + SafeAbortNonceTooLowCount uint64 } type Challenger struct { @@ -96,12 +105,16 @@ type Challenger struct { EigenABI *abi.ABI GraphClient *graphView.GraphClient GraphqlClient *graphql.Client + LevelDBStore *db.Store txMgr txmgr.TxManager cancel func() wg sync.WaitGroup + once sync.Once } func NewChallenger(ctx context.Context, cfg *ChallengerConfig) (*Challenger, error) { + _, cancel := context.WithTimeout(ctx, common4.DefaultTimeout) + defer cancel() eigenContract, err := bindings.NewBVMEigenDataLayrChain( ethc.Address(cfg.EigenContractAddr), cfg.L1Client, ) @@ -112,52 +125,68 @@ func NewChallenger(ctx context.Context, cfg *ChallengerConfig) (*Challenger, err bindings.BVMEigenDataLayrChainABI, )) if err != nil { - cfg.Logger.Err(err).Msg("parse eigenda contract abi fail") + log.Error("Challenger parse eigen layer contract abi fail", "err", err) return nil, err } eignenABI, err := bindings.BVMEigenDataLayrChainMetaData.GetAbi() if err != nil { - cfg.Logger.Err(err).Msg("get eigenda contract abi fail") + log.Error("Challenger get eigen layer contract abi fail", "err", err) return nil, err } rawEigenContract := bind.NewBoundContract( - ethc.Address(cfg.EigenContractAddr), parsed, cfg.L1Client, cfg.L1Client, + cfg.EigenContractAddr, parsed, cfg.L1Client, cfg.L1Client, cfg.L1Client, ) + + txManagerConfig := txmgr.Config{ + ResubmissionTimeout: cfg.ResubmissionTimeout, + ReceiptQueryInterval: time.Second, + NumConfirmations: cfg.NumConfirmations, + SafeAbortNonceTooLowCount: cfg.SafeAbortNonceTooLowCount, + } + + txMgr := txmgr.NewSimpleTxManager(txManagerConfig, cfg.L1Client) + graphClient := graphView.NewGraphClient(cfg.GraphProvider, cfg.Logger) graphqlClient := graphql.NewClient(graphClient.GetEndpoint(), nil) walletAddr := crypto.PubkeyToAddress(cfg.PrivKey.PublicKey) + + levelDBStore, err := db.NewStore(cfg.DbPath) + if err != nil { + log.Error("Challenger init leveldb fail", "err", err) + return nil, err + } return &Challenger{ Cfg: cfg, Ctx: ctx, EigenDaContract: eigenContract, RawEigenContract: rawEigenContract, - WalletAddr: ethc.Address(walletAddr), + WalletAddr: walletAddr, EigenABI: eignenABI, GraphClient: graphClient, GraphqlClient: graphqlClient, + LevelDBStore: levelDBStore, + txMgr: txMgr, + cancel: cancel, }, nil } -func (c *Challenger) getNextDataStore() (*graphView.DataStore, error) { +func (c *Challenger) getDataStoreById(dataStoreId string) (*graphView.DataStore, error) { var query struct { - DataStores []graphView.DataStoreGql `graphql:"dataStores(first:1,where:{storeNumber_gt: $lastStoreNumber,confirmer: $confirmer,confirmed:true})"` + DataStore graphView.DataStoreGql `graphql:"dataStore(id: $storeId)"` } variables := map[string]interface{}{ - "lastStoreNumber": graphql.String(fmt.Sprint(c.Cfg.LastStoreNumber)), - "confirmer": graphql.String(strings.ToLower(c.Cfg.EigenContractAddr.Hex())), + "storeId": graphql.String(dataStoreId), } err := c.GraphqlClient.Query(context.Background(), &query, variables) if err != nil { - c.Cfg.Logger.Error().Err(err).Msg("GetExpiringDataStores error") + log.Error("Challenger query data from graphql fail", "err", err) return nil, err } - if len(query.DataStores) == 0 { - return nil, errors.New("no new stores") - } - store, err := query.DataStores[0].Convert() + store, err := query.DataStore.Convert() if err != nil { - return nil, errors.New("conversion error") + log.Error("Challenger convert data store fail", "err", err) + return nil, err } c.Cfg.LastStoreNumber = uint64(store.StoreNumber) return store, nil @@ -166,7 +195,7 @@ func (c *Challenger) getNextDataStore() (*graphView.DataStore, error) { func (c *Challenger) callRetrieve(store *graphView.DataStore) ([]byte, []datalayr.Frame, error) { conn, err := grpc.Dial(c.Cfg.RetrieverSocket, grpc.WithInsecure()) if err != nil { - c.Cfg.Logger.Printf("Disperser Cannot connect to %v. %v\n", c.Cfg.RetrieverSocket, err) + log.Error("Disperser Cannot connect to", "retriever-socket", c.Cfg.RetrieverSocket, "err", err) return nil, nil, err } defer conn.Close() @@ -185,7 +214,7 @@ func (c *Challenger) callRetrieve(store *graphView.DataStore) ([]byte, []datalay framesBytes := reply.GetFrames() header, err := datalayr.DecodeDataStoreHeader(store.Header) if err != nil { - c.Cfg.Logger.Printf("Could not decode header %v. %v\n", header, err) + log.Error("Could not decode header", "err", err) return nil, nil, err } frames := make([]datalayr.Frame, header.NumSys+header.NumPar) @@ -211,7 +240,7 @@ func (c *Challenger) checkForFraud(store *graphView.DataStore, data []byte) (*Fr } func (c *Challenger) constructFraudProof(store *graphView.DataStore, data []byte, fraud *Fraud, frames []datalayr.Frame) (*FraudProof, error) { - //encode data to frames here + // encode data to frames here header, err := datalayr.DecodeDataStoreHeader(store.Header) if err != nil { c.Cfg.Logger.Printf("Could not decode header %v. %v\n", header, err) @@ -286,7 +315,7 @@ func (fp *DataLayrDisclosureProof) ToDisclosureProofs() rc.BVMEigenDataLayrChain func (c *Challenger) UpdateGasPrice(ctx context.Context, tx *types.Transaction) (*types.Transaction, error) { opts := &bind.TransactOpts{ - From: ethc.Address(c.WalletAddr), + From: c.WalletAddr, Signer: func(addr ethc.Address, tx *types.Transaction) (*types.Transaction, error) { return c.Cfg.SignerFn(ctx, addr, tx) }, @@ -300,7 +329,7 @@ func (c *Challenger) UpdateGasPrice(ctx context.Context, tx *types.Transaction) return finalTx, nil case c.IsMaxPriorityFeePerGasNotFoundError(err): - log.Warn("MtChallenger eth_maxPriorityFeePerGas is unsupported by current backend, using fallback gasTipCap") + log.Info("MtChallenger eth_maxPriorityFeePerGas is unsupported by current backend, using fallback gasTipCap", "txData", tx.Data()) opts.GasTipCap = FallbackGasTipCap return c.RawEigenContract.RawTransact(opts, tx.Data()) @@ -399,79 +428,190 @@ func (c *Challenger) postFraudProof(store *graphView.DataStore, fraudProof *Frau return tx, nil } +func (c *Challenger) makReRollupBatchTx(ctx context.Context, batchIndex *big.Int) (*types.Transaction, error) { + balance, err := c.Cfg.L1Client.BalanceAt( + c.Ctx, ethc.Address(c.WalletAddr), nil, + ) + if err != nil { + log.Error("MtChallenger unable to get current balance", "err", err) + return nil, err + } + log.Info("MtChallenger wallet address balance", "balance", balance) + nonce64, err := c.Cfg.L1Client.NonceAt( + c.Ctx, ethc.Address(c.WalletAddr), nil, + ) + if err != nil { + log.Error("MtChallenger unable to get current nonce", "err", err) + return nil, err + } + nonce := new(big.Int).SetUint64(nonce64) + opts := &bind.TransactOpts{ + From: ethc.Address(c.WalletAddr), + Signer: func(addr ethc.Address, tx *types.Transaction) (*types.Transaction, error) { + return c.Cfg.SignerFn(ctx, addr, tx) + }, + Context: ctx, + Nonce: nonce, + NoSend: true, + } + tx, err := c.EigenDaContract.SubmitReRollUpInfo(opts, batchIndex) + switch { + case err == nil: + return tx, nil + + case c.IsMaxPriorityFeePerGasNotFoundError(err): + log.Warn("MtChallenger eth_maxPriorityFeePerGas is unsupported by current backend, using fallback gasTipCap") + opts.GasTipCap = FallbackGasTipCap + return c.EigenDaContract.SubmitReRollUpInfo(opts, batchIndex) + default: + return nil, err + } +} + +func (c *Challenger) submitReRollupBatchIndex(batchIndex *big.Int) (*types.Transaction, error) { + tx, err := c.makReRollupBatchTx(c.Ctx, batchIndex) + if err != nil { + return nil, err + } + updateGasPrice := func(ctx context.Context) (*types.Transaction, error) { + log.Info("MtChallenger makReRollupBatchTx update gas price") + return c.UpdateGasPrice(ctx, tx) + } + receipt, err := c.txMgr.Send( + c.Ctx, updateGasPrice, c.SendTransaction, + ) + if err != nil { + return nil, err + } + log.Info("MtChallenge submit re-rollup batch index success", "TxHash", receipt.TxHash) + return tx, nil +} + func (c *Challenger) Start() error { c.wg.Add(1) go c.eventLoop() + c.once.Do(func() { + log.Info("MtChallenge start exec once update da tool") + if c.Cfg.ReRollupToolEnable { + reRollupBatchIndex := strings.Split(c.Cfg.NeedReRollupBatch, "|") + for index := 0; index < len(reRollupBatchIndex); index++ { + bigParam := new(big.Int) + bigBatchIndex, ok := bigParam.SetString(reRollupBatchIndex[index], 10) + if !ok { + log.Error("MtChallenge string to big.int fail", "ok", ok) + continue + } + tx, err := c.submitReRollupBatchIndex(bigBatchIndex) + if err != nil { + log.Error("MtChallenge tool submit re-rollup info fail", "batchIndex", reRollupBatchIndex[index], "err", err) + continue + } + log.Info("MtChallenge tool submit re-rollup info success", "batchIndex", reRollupBatchIndex[index], "txHash", tx.Hash().String()) + } + } + }) return nil } func (c *Challenger) Stop() { - // c.cancel() + c.cancel() c.wg.Wait() } func (c *Challenger) eventLoop() { - ticker := time.NewTicker(500 * time.Millisecond) + defer c.wg.Done() + ticker := time.NewTicker(c.Cfg.PollInterval) + defer ticker.Stop() for { - <-ticker.C - //fetch the next datastore - store, err := c.getNextDataStore() - if err != nil { - continue - } - obj, _ := json.Marshal(store) - c.Cfg.Logger.Info().Msg("Got store:" + string(obj)) - data, frames, err := c.callRetrieve(store) - // retrieve the data associated with the store - if err != nil { - c.Cfg.Logger.Error().Err(err).Msg("Error getting data") - continue - } - batchTxn := new([]eigenda.BatchTx) - batchRlpStream := rlp.NewStream(bytes.NewBuffer(data), uint64(len(data))) - err = batchRlpStream.Decode(batchTxn) - if err != nil { - c.Cfg.Logger.Error().Err(err).Msg("Decode batch txn fail") - continue - } - newBatchTxn := *batchTxn - for i := 0; i < len(newBatchTxn); i++ { - l2Tx := new(l2types.Transaction) - rlpStream := l2rlp.NewStream(bytes.NewBuffer(newBatchTxn[i].RawTx), 0) - if err := l2Tx.DecodeRLP(rlpStream); err != nil { - c.Cfg.Logger.Error().Err(err).Msg("Decode RLP fail") - } - c.Cfg.Logger.Info().Msg("tx hash:" + l2Tx.Hash().Hex()) - // tx check for tmp, will remove in future - l2Transaction, _, err := c.Cfg.L2Client.TransactionByHash(c.Ctx, l2Tx.Hash()) + select { + case <-ticker.C: + latestBatchIndex, err := c.EigenDaContract.RollupBatchIndex(&bind.CallOpts{}) if err != nil { - c.Cfg.Logger.Error().Err(err).Msg("No this transaction") + log.Error("MtChallenge get batch index fail", "err", err) continue } - c.Cfg.Logger.Info().Msg("fond transaction, hash is " + l2Transaction.Hash().Hex()) - } - // check if the fraud string exists within the data - fraud, exists := c.checkForFraud(store, data) - if !exists { - c.Cfg.Logger.Info().Msg("No fraud") - continue - } - obj, _ = json.Marshal(fraud) - proof, err := c.constructFraudProof(store, data, fraud, frames) - if err != nil { - c.Cfg.Logger.Error().Err(err).Msg("Error constructing fraud") - continue - } - obj, _ = json.Marshal(proof) - c.Cfg.Logger.Info().Msg("Fraud proof:" + string(obj)) - obj, _ = json.Marshal(store) - c.Cfg.Logger.Info().Msg("Store:" + string(obj)) - // post the fraud proof to the chain - tx, err := c.postFraudProof(store, proof) - if err != nil { - c.Cfg.Logger.Error().Err(err).Msg("Error posting fraud proof") - continue + batchIndex, ok := c.LevelDBStore.GetLatestBatchIndex() + if !ok { + log.Error("MtChallenge get batch index from db fail", "err", err) + } + if c.Cfg.CheckerBatchIndex > latestBatchIndex.Uint64() { + log.Info("MtChallenge Batch Index", "DbBatchIndex", batchIndex, "ContractBatchIndex", latestBatchIndex.Uint64()-c.Cfg.CheckerBatchIndex) + continue + } + if batchIndex >= (latestBatchIndex.Uint64() - c.Cfg.CheckerBatchIndex) { + log.Info("MtChallenge db batch index and contract batch idnex is equal", "DbBatchIndex", batchIndex, "ContractBatchIndex", latestBatchIndex.Uint64()-c.Cfg.CheckerBatchIndex) + continue + } + log.Info("MtChallenge db batch index and contract batch idnex", + "DbBatchIndex", batchIndex, "ContractBatchIndex", latestBatchIndex.Uint64(), + "latestBatchIndex.Uint64() - c.Cfg.CheckerBatchIndex", latestBatchIndex.Uint64()-c.Cfg.CheckerBatchIndex, + ) + for i := batchIndex; i <= (latestBatchIndex.Uint64() - c.Cfg.CheckerBatchIndex); i++ { + dataStoreId, err := c.EigenDaContract.GetRollupStoreByRollupBatchIndex(&bind.CallOpts{}, big.NewInt(int64(i))) + if err != nil { + continue + } + store, err := c.getDataStoreById(strconv.Itoa(int(dataStoreId.DataStoreId))) + if err != nil { + log.Error("MtChallenge get data store fail", "err", err) + continue + } + log.Info("MtChallenge get data store by id success", "Confirmed", store.Confirmed) + if store.Confirmed { + data, frames, err := c.callRetrieve(store) + if err != nil { + log.Error("MtChallenge error getting data", "err", err) + continue + } + batchTxn := new([]eigenda.BatchTx) + batchRlpStream := rlp.NewStream(bytes.NewBuffer(data), uint64(len(data))) + err = batchRlpStream.Decode(batchTxn) + if err != nil { + log.Error("MtChallenge decode batch txn fail", "err", err) + continue + } + newBatchTxn := *batchTxn + for i := 0; i < len(newBatchTxn); i++ { + l2Tx := new(l2types.Transaction) + rlpStream := l2rlp.NewStream(bytes.NewBuffer(newBatchTxn[i].RawTx), 0) + if err := l2Tx.DecodeRLP(rlpStream); err != nil { + c.Cfg.Logger.Error().Err(err).Msg("Decode RLP fail") + } + log.Info("MtChallenge decode transaction", "hash", l2Tx.Hash().Hex()) + + // tx check for tmp, will remove in future + l2Transaction, _, err := c.Cfg.L2Client.TransactionByHash(c.Ctx, l2Tx.Hash()) + if err != nil { + log.Error("MtChallenge no this transaction", "err", err) + continue + } + log.Info("MtChallenge fond transaction", "hash", l2Transaction.Hash().Hex()) + } + + // check if the fraud string exists within the data + fraud, exists := c.checkForFraud(store, data) + if !exists { + log.Info("MtChallenge no fraud") + c.LevelDBStore.SetLatestBatchIndex(i) + continue + } + proof, err := c.constructFraudProof(store, data, fraud, frames) + if err != nil { + log.Error("MtChallenge error constructing fraud", "err", err) + continue + } + tx, err := c.postFraudProof(store, proof) + if err != nil { + log.Error("MtChallenge error posting fraud proof", "err", err) + continue + } + log.Info("MtChallenge fraud proof tx", "hash", tx.Hash().Hex()) + } + c.LevelDBStore.SetLatestBatchIndex(i) + } + case err := <-c.Ctx.Done(): + log.Error("MtChallenge eigenDa sequencer service shutting down", "err", err) + return } - c.Cfg.Logger.Info().Msg("Fraud proof tx:" + tx.Hash().Hex()) } } diff --git a/mt-challenger/challenger/db/level.go b/mt-challenger/challenger/db/level.go new file mode 100644 index 000000000..6377caeb9 --- /dev/null +++ b/mt-challenger/challenger/db/level.go @@ -0,0 +1,38 @@ +package db + +import ( + "encoding/binary" + "github.com/syndtr/goleveldb/leveldb" +) + +type LevelDBStore struct { + *leveldb.DB +} + +func (d *LevelDBStore) Put(key []byte, value []byte) error { + return d.DB.Put(key, value, nil) +} + +func (d *LevelDBStore) Get(key []byte) ([]byte, error) { + return d.DB.Get(key, nil) +} + +func (d *LevelDBStore) Delete(key []byte) error { + return d.DB.Delete(key, nil) +} + +func NewLevelDBStore(path string) (*LevelDBStore, error) { + handle, err := leveldb.OpenFile(path, nil) + return &LevelDBStore{handle}, err +} + +func toByteArray(i uint64) []byte { + arr := make([]byte, 8) + binary.BigEndian.PutUint64(arr[0:8], uint64(i)) + return arr +} + +func toUint64(arr []byte) uint64 { + i := binary.BigEndian.Uint64(arr) + return i +} diff --git a/mt-challenger/challenger/db/store.go b/mt-challenger/challenger/db/store.go new file mode 100644 index 000000000..b392359ed --- /dev/null +++ b/mt-challenger/challenger/db/store.go @@ -0,0 +1,71 @@ +package db + +import ( + "github.com/ethereum/go-ethereum/log" +) + +type Store struct { + db *LevelDBStore +} + +func NewStore(path string) (*Store, error) { + db, err := NewLevelDBStore(path) + if err != nil { + log.Info("Could not create leveldb database.") + return nil, err + } + return &Store{ + db: db, + }, nil +} + +func (s *Store) GetLatestBatchIndex() (uint64, bool) { + key := []byte("BatchIndex") + data, err := s.db.Get(key) + if err != nil { + return 0, false + } + bn := toUint64(data) + return bn, true +} + +func (s *Store) SetLatestBatchIndex(bn uint64) bool { + key := []byte("BatchIndex") + data := toByteArray(bn) + err := s.db.Put(key, data) + return err == nil +} + +func (s *Store) GetReRollupIndex() (uint64, bool) { + key := []byte("ReRollupIndex") + data, err := s.db.Get(key) + if err != nil { + return 0, false + } + bn := toUint64(data) + return bn, true +} + +func (s *Store) SetLatestReRollupIndex(bn uint64) bool { + key := []byte("ReRollupIndex") + data := toByteArray(bn) + err := s.db.Put(key, data) + return err == nil +} + +func (s *Store) GetToolReRollupIndex() (uint64, bool) { + key := []byte("ToolReRollupIndex") + data, err := s.db.Get(key) + if err != nil { + return 0, false + } + bn := toUint64(data) + return bn, true +} + +func (s *Store) SetToolReRollupIndex(bn uint64) bool { + key := []byte("ToolReRollupIndex") + data := toByteArray(bn) + err := s.db.Put(key, data) + return err == nil +} diff --git a/mt-challenger/cmd/mt-challenger/main.go b/mt-challenger/cmd/mt-challenger/main.go index 7448f8c3f..f7a614635 100644 --- a/mt-challenger/cmd/mt-challenger/main.go +++ b/mt-challenger/cmd/mt-challenger/main.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/mantlenetworkio/mantle/mt-challenger" "github.com/mantlenetworkio/mantle/mt-challenger/flags" @@ -16,6 +17,13 @@ var ( ) func main() { + log.Root().SetHandler( + log.LvlFilterHandler( + log.LvlInfo, + log.StreamHandler(os.Stdout, log.TerminalFormat(true)), + ), + ) + app := cli.NewApp() app.Flags = flags.Flags app.Version = fmt.Sprintf("%s-%s", GitVersion, params.VersionWithCommit(GitCommit, GitDate)) @@ -25,6 +33,6 @@ func main() { app.Action = challenger.Main(GitVersion) err := app.Run(os.Args) if err != nil { - fmt.Println("MtChallenger application failed", "message", err) + log.Crit("MtChallenger Application failed", "message", err) } } diff --git a/mt-challenger/config.go b/mt-challenger/config.go index c53d036b6..ccc4cba9d 100644 --- a/mt-challenger/config.go +++ b/mt-challenger/config.go @@ -5,23 +5,31 @@ import ( "github.com/mantlenetworkio/mantle/mt-challenger/challenger" "github.com/mantlenetworkio/mantle/mt-challenger/flags" "github.com/urfave/cli" + "time" ) type Config struct { - L1EthRpc string - L2MtlRpc string - ChainId uint64 - PrivateKey string - Mnemonic string - SequencerHDPath string - EigenContractAddress string - GraphProvider string - RetrieverSocket string - KzgConfig challenger.KzgConfig - FromStoreNumber uint64 - DisableHTTP2 bool - - LoggingConfig logging.Config + L1EthRpc string + L2MtlRpc string + ChainId uint64 + PrivateKey string + Mnemonic string + SequencerHDPath string + EigenContractAddress string + GraphProvider string + RetrieverSocket string + KzgConfig challenger.KzgConfig + FromStoreNumber uint64 + PollInterval time.Duration + DbPath string + CheckerBatchIndex uint64 + DisableHTTP2 bool + NeedReRollupBatch string + ReRollupToolEnable bool + ResubmissionTimeout time.Duration + NumConfirmations uint64 + SafeAbortNonceTooLowCount uint64 + LoggingConfig logging.Config } func NewConfig(ctx *cli.Context) (Config, error) { @@ -42,9 +50,17 @@ func NewConfig(ctx *cli.Context) (Config, error) { Order: ctx.GlobalUint64(flags.OrderFlag.Name), NumWorker: ctx.GlobalInt(flags.KzgWorkersFlag.Name), }, - LoggingConfig: logging.ReadCLIConfig(ctx), - FromStoreNumber: ctx.GlobalUint64(flags.StartStoreNumFlag.Name), - DisableHTTP2: ctx.GlobalBool(flags.HTTP2DisableFlag.Name), + ResubmissionTimeout: ctx.GlobalDuration(flags.ResubmissionTimeoutFlag.Name), + NumConfirmations: ctx.GlobalUint64(flags.NumConfirmationsFlag.Name), + SafeAbortNonceTooLowCount: ctx.GlobalUint64(flags.SafeAbortNonceTooLowCountFlag.Name), + LoggingConfig: logging.ReadCLIConfig(ctx), + FromStoreNumber: ctx.GlobalUint64(flags.StartStoreNumFlag.Name), + PollInterval: ctx.GlobalDuration(flags.PollIntervalFlag.Name), + DbPath: ctx.GlobalString(flags.DbPathFlag.Name), + CheckerBatchIndex: ctx.GlobalUint64(flags.CheckerBatchIndexFlag.Name), + NeedReRollupBatch: ctx.GlobalString(flags.NeedReRollupBatchFlag.Name), + ReRollupToolEnable: ctx.GlobalBool(flags.ReRollupToolEnableFlag.Name), + DisableHTTP2: ctx.GlobalBool(flags.HTTP2DisableFlag.Name), } return cfg, nil } diff --git a/mt-challenger/flags/flags.go b/mt-challenger/flags/flags.go index 166e54143..f866512dc 100644 --- a/mt-challenger/flags/flags.go +++ b/mt-challenger/flags/flags.go @@ -97,6 +97,47 @@ var ( Value: 4, EnvVar: prefixEnvVar("KZG_NUM_WORKERS"), } + PollIntervalFlag = cli.DurationFlag{ + Name: "poll-interval", + Usage: "main worker poll interval", + Required: true, + EnvVar: prefixEnvVar("POLL_INTERVAL"), + } + DbPathFlag = cli.StringFlag{ + Name: "db-path", + Usage: "db path of leveldb", + Required: true, + EnvVar: prefixEnvVar("DB_PATH"), + } + CheckerBatchIndexFlag = cli.Uint64Flag{ + Name: "checker-batch-index", + Usage: "checker batch index", + Required: true, + Value: 1, + EnvVar: prefixEnvVar("CHECKER_BATCH_INDEX"), + } + ResubmissionTimeoutFlag = cli.DurationFlag{ + Name: "resubmission-timeout", + Usage: "Duration we will wait before resubmitting a " + + "transaction to L1", + Required: true, + EnvVar: prefixEnvVar("RESUBMISSION_TIMEOUT"), + } + NumConfirmationsFlag = cli.Uint64Flag{ + Name: "num-confirmations", + Usage: "Number of confirmations which we will wait after " + + "appending a new batch", + Required: true, + EnvVar: prefixEnvVar("NUM_CONFIRMATIONS"), + } + SafeAbortNonceTooLowCountFlag = cli.Uint64Flag{ + Name: "safe-abort-nonce-too-low-count", + Usage: "Number of ErrNonceTooLow observations required to " + + "give up on a tx at a particular nonce without receiving " + + "confirmation", + Required: true, + EnvVar: prefixEnvVar("SAFE_ABORT_NONCE_TOO_LOW_COUNT"), + } StartStoreNumFlag = cli.Uint64Flag{ Name: "starting-store-numer", Usage: "Store number from which challenger should pull", @@ -109,6 +150,16 @@ var ( Usage: "Whether or not to disable HTTP/2 support.", EnvVar: prefixEnvVar("HTTP2_DISABLE"), } + NeedReRollupBatchFlag = cli.StringFlag{ + Name: "need-re-rollup-batch", + Usage: "tool need re rollup batch", + EnvVar: prefixEnvVar("NEED_RE_ROLLUP_BATCH"), + } + ReRollupToolEnableFlag = cli.BoolFlag{ + Name: "re-rollup-tool-enable", + Usage: "re rollup tool support.", + EnvVar: prefixEnvVar("RE_ROLLUP_TOOL_ENABLE"), + } ) var requiredFlags = []cli.Flag{ @@ -123,11 +174,19 @@ var requiredFlags = []cli.Flag{ SrsTablePathFlag, OrderFlag, RetrieverSocketFlag, + DbPathFlag, + CheckerBatchIndexFlag, + PollIntervalFlag, + ResubmissionTimeoutFlag, + NumConfirmationsFlag, + SafeAbortNonceTooLowCountFlag, } var optionalFlags = []cli.Flag{ KzgWorkersFlag, HTTP2DisableFlag, + NeedReRollupBatchFlag, + ReRollupToolEnableFlag, } func init() { diff --git a/mt-challenger/go.mod b/mt-challenger/go.mod index 8a91739ab..df9a21cce 100644 --- a/mt-challenger/go.mod +++ b/mt-challenger/go.mod @@ -11,24 +11,25 @@ replace github.com/mantlenetworkio/mantle/mt-batcher => ../mt-batcher replace github.com/mantlenetworkio/mantle/l2geth v0.0.0 => ../l2geth require ( - github.com/ethereum/go-ethereum v1.10.26 - github.com/mantlenetworkio/mantle/bss-core v0.0.0-20230105071248-1724485d2f66 // github.com/Layr-Labs/datalayr/common v0.0.0-00010101000000-000000000000 + github.com/ethereum/go-ethereum v1.10.26 github.com/mantlenetworkio/mantle/l2geth v0.0.0 github.com/mantlenetworkio/mantle/mt-batcher v0.0.0 github.com/pkg/errors v0.9.1 github.com/shurcooL/graphql v0.0.0-20220606043923-3cf50f8a0a29 - github.com/urfave/cli v1.22.10 + github.com/urfave/cli v1.22.12 google.golang.org/grpc v1.51.0 ) -require github.com/Layr-Labs/datalayr/common v0.0.0-00010101000000-000000000000 +require ( + github.com/Layr-Labs/datalayr/common v0.0.0-00010101000000-000000000000 + github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 +) require ( github.com/Layr-Labs/datalayr/lib/merkzg v0.0.0-00010101000000-000000000000 // indirect github.com/VictoriaMetrics/fastcache v1.9.0 // indirect github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847 // indirect - github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd v0.22.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect @@ -43,7 +44,8 @@ require ( github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/decred/dcrd/hdkeychain/v3 v3.0.0 // indirect github.com/elastic/gosigar v0.14.2 // indirect - github.com/getsentry/sentry-go v0.15.0 // indirect + github.com/go-kit/log v0.2.0 // indirect + github.com/go-logr/logr v1.2.3 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-resty/resty/v2 v2.7.0 // indirect github.com/go-stack/stack v1.8.1 // indirect @@ -51,19 +53,15 @@ require ( github.com/golang/snappy v0.0.4 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect + github.com/hashicorp/go-bexpr v0.1.11 // indirect github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/uint256 v1.2.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.16 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/prometheus/client_golang v1.11.0 // indirect - github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.30.0 // indirect - github.com/prometheus/procfs v0.7.3 // indirect github.com/prometheus/tsdb v0.10.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/rjeczalik/notify v0.9.2 // indirect @@ -73,7 +71,6 @@ require ( github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 // indirect github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/tklauser/go-sysconf v0.3.10 // indirect github.com/tklauser/numcpus v0.4.0 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect @@ -82,7 +79,7 @@ require ( golang.org/x/net v0.3.0 // indirect golang.org/x/sys v0.3.0 // indirect golang.org/x/text v0.5.0 // indirect - google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 // indirect + google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect rsc.io/tmplfunc v0.0.3 // indirect diff --git a/mt-challenger/go.sum b/mt-challenger/go.sum index 42a351135..18dd7f393 100644 --- a/mt-challenger/go.sum +++ b/mt-challenger/go.sum @@ -8,31 +8,14 @@ cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTj cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= @@ -54,6 +37,7 @@ github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6L github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= @@ -74,7 +58,6 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= @@ -104,7 +87,6 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxq github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= @@ -241,32 +223,31 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getsentry/sentry-go v0.15.0 h1:CP9bmA7pralrVUedYZsmIHWpq/pBtXTSew7xvVpfLaA= -github.com/getsentry/sentry-go v0.15.0/go.mod h1:RZPJKSw+adu8PBNygiri/A98FqVr2HtRckJk9XVxJ9I= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= +github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= @@ -298,20 +279,13 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -338,7 +312,6 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -346,14 +319,9 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -383,6 +351,7 @@ github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyN github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-bexpr v0.1.11 h1:6DqdA/KBjurGby9yTY0bmkathya0lfwF2SeuubCI7dY= +github.com/hashicorp/go-bexpr v0.1.11/go.mod h1:f03lAo0duBlDIUMGCuad8oLcgejw4m7U+N8T+6Kz1AE= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= @@ -439,13 +408,10 @@ github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= @@ -466,7 +432,6 @@ github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM52 github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -484,8 +449,6 @@ github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0U github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mantlenetworkio/mantle/bss-core v0.0.0-20230105071248-1724485d2f66 h1:uzpgf6CuGcyK28BcpeYs33fnYjK0gqZ1NrnOhVOAN/E= -github.com/mantlenetworkio/mantle/bss-core v0.0.0-20230105071248-1724485d2f66/go.mod h1:NFQHTC7R0jDLH9ihMAFaDzCOW4i3PtaV3MQDRvIJFQQ= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -513,7 +476,6 @@ github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4 github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -524,9 +486,10 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= -github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mitchellh/pointerstructure v1.2.1 h1:ZhBBeX8tSlRpu/FFhXH4RC4OJzFlqsQhoHZAz4x7TIw= +github.com/mitchellh/pointerstructure v1.2.1/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= @@ -536,7 +499,6 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= @@ -561,13 +523,13 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.2.0 h1:3ZNA3L1c5FYDFTTxbFeVGGD8jYvjYauHD30YgLxVsNI= +github.com/onsi/ginkgo/v2 v2.5.1 h1:auzK7OI497k6x4OvWq+TKAcpcSAlod0doAH72oIN0Jw= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/onsi/gomega v1.24.0 h1:+0glovB9Jd6z3VR+ScSwQqXVTIfJcGA9UBM8yzQxhqg= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= @@ -589,7 +551,6 @@ github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssy github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -603,33 +564,20 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.30.0 h1:JEkYlQnpzrzQFxi6gnukFPdQ+ac82oRhzMcIduJu/Ug= -github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic= github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4= @@ -668,7 +616,6 @@ github.com/shurcooL/graphql v0.0.0-20220606043923-3cf50f8a0a29/go.mod h1:AuYgA5K github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -690,13 +637,18 @@ github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3 github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= @@ -713,8 +665,8 @@ github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2n github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.10 h1:p8Fspmz3iTctJstry1PYS3HVdllxnEzTEsgIgtxTrCk= -github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.12 h1:igJgVw1JdKH+trcLWLeLwZjU9fEfPesQ+9/e4MQ44S8= +github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= @@ -725,11 +677,7 @@ github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+m github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -739,8 +687,6 @@ go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -780,9 +726,6 @@ golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm0 golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -794,16 +737,11 @@ golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -825,23 +763,10 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -851,7 +776,6 @@ golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -863,7 +787,6 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -871,11 +794,9 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -900,32 +821,17 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -939,7 +845,6 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -953,7 +858,6 @@ golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -1000,32 +904,12 @@ golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1044,22 +928,12 @@ google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEn google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1075,26 +949,10 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 h1:ysnBoUyeL/H6RCvNRhWHjKoDEmguI+mPU+qHgK8qv/w= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1107,11 +965,6 @@ google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= @@ -1125,7 +978,6 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= @@ -1135,7 +987,6 @@ google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -1155,13 +1006,13 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1170,13 +1021,9 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/mt-challenger/mt_challenger.go b/mt-challenger/mt_challenger.go index 8eb7c479b..ba1a58b34 100644 --- a/mt-challenger/mt_challenger.go +++ b/mt-challenger/mt_challenger.go @@ -4,11 +4,14 @@ import ( "context" "github.com/Layr-Labs/datalayr/common/logging" ethc "github.com/ethereum/go-ethereum/common" - bsscore "github.com/mantlenetworkio/mantle/bss-core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" "github.com/mantlenetworkio/mantle/l2geth/common" "github.com/mantlenetworkio/mantle/mt-batcher/l1l2client" + common2 "github.com/mantlenetworkio/mantle/mt-batcher/services/common" "github.com/mantlenetworkio/mantle/mt-challenger/challenger" "github.com/urfave/cli" + "math/big" "time" ) @@ -25,7 +28,7 @@ func Main(gitVersion string) func(ctx *cli.Context) error { if err != nil { return err } - sequencerPrivKey, _, err := bsscore.ParseWalletPrivKeyAndContractAddr( + challengerPrivKey, _, err := common2.ParseWalletPrivKeyAndContractAddr( "MtChallenger", cfg.Mnemonic, cfg.SequencerHDPath, cfg.PrivateKey, cfg.EigenContractAddress, ) @@ -36,27 +39,47 @@ func Main(gitVersion string) func(ctx *cli.Context) error { if err != nil { return err } - logger.Info().Msg("MtChallenger l1Client init success") + log.Info("MtChallenger l1Client init success") l2Client, err := l1l2client.DialL2EthClientWithTimeout(ctx, cfg.L2MtlRpc, cfg.DisableHTTP2) if err != nil { return err } - logger.Info().Msg("MtChallenger l2Client init success") + log.Info("MtChallenger l2Client init success") timeout, err := time.ParseDuration("12s") if err != nil { - logger.Fatal().Err(err).Msg("MtChallenger improper timeout from config") + log.Error("MtChallenger improper timeout from config", "err", err) + } + chainID, err := l1Client.ChainID(ctx) + if err != nil { + return err + } + + signer := func(chainID *big.Int) challenger.SignerFn { + s := common2.PrivateKeySignerFn(challengerPrivKey, chainID) + return func(_ context.Context, addr ethc.Address, tx *types.Transaction) (*types.Transaction, error) { + return s(addr, tx) + } } challengerConfig := &challenger.ChallengerConfig{ - L1Client: l1Client, - L2Client: l2Client, - EigenContractAddr: ethc.Address(common.HexToAddress(cfg.EigenContractAddress)), - Logger: logger, - PrivKey: sequencerPrivKey, - GraphProvider: cfg.GraphProvider, - RetrieverSocket: cfg.RetrieverSocket, - KzgConfig: cfg.KzgConfig, - LastStoreNumber: cfg.FromStoreNumber, - Timeout: timeout, + L1Client: l1Client, + L2Client: l2Client, + EigenContractAddr: ethc.Address(common.HexToAddress(cfg.EigenContractAddress)), + Logger: logger, + PrivKey: challengerPrivKey, + GraphProvider: cfg.GraphProvider, + RetrieverSocket: cfg.RetrieverSocket, + KzgConfig: cfg.KzgConfig, + LastStoreNumber: cfg.FromStoreNumber, + Timeout: timeout, + PollInterval: cfg.PollInterval, + DbPath: cfg.DbPath, + CheckerBatchIndex: cfg.CheckerBatchIndex, + NeedReRollupBatch: cfg.NeedReRollupBatch, + ReRollupToolEnable: cfg.ReRollupToolEnable, + SignerFn: signer(chainID), + ResubmissionTimeout: cfg.ResubmissionTimeout, + NumConfirmations: cfg.NumConfirmations, + SafeAbortNonceTooLowCount: cfg.SafeAbortNonceTooLowCount, } cLager, err := challenger.NewChallenger(ctx, challengerConfig) if err != nil { @@ -65,7 +88,7 @@ func Main(gitVersion string) func(ctx *cli.Context) error { if err := cLager.Start(); err != nil { return err } - logger.Info().Msg("MtChallenger da challenger service start") + log.Info("MtChallenger da challenger service start") defer cLager.Stop() return nil } diff --git a/ops/scripts/batch-submitter.sh b/ops/scripts/batch-submitter.sh index 55935b3d6..42d7788e9 100755 --- a/ops/scripts/batch-submitter.sh +++ b/ops/scripts/batch-submitter.sh @@ -21,7 +21,9 @@ fi # waits for l2geth to be up -curl --fail \ +curl -XPOST \ + -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ + --fail \ --show-error \ --silent \ --retry-connrefused \ diff --git a/package.json b/package.json index 4a395b337..7a03d6adf 100644 --- a/package.json +++ b/package.json @@ -89,6 +89,7 @@ "@codechecks/client": "^0.1.11", "@ethersproject/abstract-provider": "^5.6.1", "@openzeppelin/contracts": "^4.3.2", - "@openzeppelin/contracts-upgradeable": "^4.3.2" + "@openzeppelin/contracts-upgradeable": "^4.3.2", + "node-fetch": "^3.3.0" } } diff --git a/packages/contracts/addresses.json b/packages/contracts/addresses.json index 097ef64c3..f0d3f8cc2 100644 --- a/packages/contracts/addresses.json +++ b/packages/contracts/addresses.json @@ -1,22 +1,22 @@ { - "ChainStorageContainer-SCC-batches": "0x7A8B94a9fA2bb0581D2EEA2fEd875FCA97494612", - "StateCommitmentChain": "0xd9e2F450525079e1e29fB23Bc7Caca6F61f8fD4a", - "TestBitToken": "0x5a0069E211A28cBD1a7dbD585877596FeD07805b", - "ChainStorageContainer-CTC-batches": "0x19C22f181280dF6Ad1d97285cdD430173Df91C12", - "Proxy__BVM_L1StandardBridge": "0x8BAccFF561FDe61D6bC8B6f299fFBa561d2189B9", - "TssStakingSlashing": "0x82e130FF187E787D5DdDFAa4f36CB59e6B1Da6dd", - "BVM_L1CrossDomainMessenger": "0xEd5166f12FCb48a0804B62FDccB37f59F1F1bc3B", - "Proxy__TSS_GroupManager": "0x36fCf02Fc651c0b7ef2ECA446Dd2405364F85337", - "Lib_AddressManager": "0x92aBAD50368175785e4270ca9eFd169c949C4ce1", - "AddressDictator": "0xD007896d9E3e4514a1f1216A91d33a72e15bf5C0", - "BVM_EigenDataLayrChain": "0xdf3BD218A936A92be5e43592143ecc7a33cef514", - "CanonicalTransactionChain": "0x0090171f848B2aa86918E5Ef2406Ab3d424fdd83", - "TssGroupManager": "0x52753615226F8aC8a464bfecb11Ef798CFF3793f", - "L1StandardBridge_for_verification_only": "0x7B2a516Ef6016699c918C95dc57b0427e17d1c70", - "ChugSplashDictator": "0x9c28c8D298ae7Ebf8daA6FA54e1F2909313dB158", - "Proxy__BVM_EigenDataLayrChain": "0xc2E4F2038D456AfEFfF2351234BCaFCB6837baC1", - "Proxy__BVM_L1CrossDomainMessenger": "0x7959CF3b8ffC87Faca8aD8a1B5D95c0f58C0BEf8", - "Proxy__TSS_StakingSlashing": "0xa83239cf2b900682001f9144144B5E5e5788A631", - "BondManager": "0x9faB987C9C469EB23Da31B7848B28aCf30905eA8", -"AddressManager": "0x92aBAD50368175785e4270ca9eFd169c949C4ce1" + "ChainStorageContainer-SCC-batches": "0x0090171f848B2aa86918E5Ef2406Ab3d424fdd83", + "StateCommitmentChain": "0x8BAccFF561FDe61D6bC8B6f299fFBa561d2189B9", + "TestBitToken": "0x92aBAD50368175785e4270ca9eFd169c949C4ce1", + "ChainStorageContainer-CTC-batches": "0x7A8B94a9fA2bb0581D2EEA2fEd875FCA97494612", + "Proxy__BVM_L1StandardBridge": "0x52753615226F8aC8a464bfecb11Ef798CFF3793f", + "TssStakingSlashing": "0x36fCf02Fc651c0b7ef2ECA446Dd2405364F85337", + "BVM_L1CrossDomainMessenger": "0xD076364Fa5de1a4512c58b39ad63DD720B7B9E11", + "Proxy__TSS_GroupManager": "0xa83239cf2b900682001f9144144B5E5e5788A631", + "Lib_AddressManager": "0x19C22f181280dF6Ad1d97285cdD430173Df91C12", + "AddressDictator": "0xE6A251EefaEE70E8645FBAdf21E9B1246e07C374", + "BVM_EigenDataLayrChain": "0xc2E4F2038D456AfEFfF2351234BCaFCB6837baC1", + "CanonicalTransactionChain": "0x9faB987C9C469EB23Da31B7848B28aCf30905eA8", + "TssGroupManager": "0x82e130FF187E787D5DdDFAa4f36CB59e6B1Da6dd", + "L1StandardBridge_for_verification_only": "0xdf3BD218A936A92be5e43592143ecc7a33cef514", + "ChugSplashDictator": "0x18DF7d7Cc40928f07d3EF0e5404b41F97e8560Ad", + "Proxy__BVM_EigenDataLayrChain": "0x5a0069E211A28cBD1a7dbD585877596FeD07805b", + "Proxy__BVM_L1CrossDomainMessenger": "0xd9e2F450525079e1e29fB23Bc7Caca6F61f8fD4a", + "Proxy__TSS_StakingSlashing": "0xe6cd9e7b620964bECd42c7Ad41e56724f515E284", + "BondManager": "0xEd5166f12FCb48a0804B62FDccB37f59F1F1bc3B", +"AddressManager": "0x19C22f181280dF6Ad1d97285cdD430173Df91C12" } diff --git a/packages/contracts/addresses.txt b/packages/contracts/addresses.txt index 285e7f482..02ab74e32 100644 --- a/packages/contracts/addresses.txt +++ b/packages/contracts/addresses.txt @@ -1,19 +1,19 @@ -0x7A8B94a9fA2bb0581D2EEA2fEd875FCA97494612 -0xd9e2F450525079e1e29fB23Bc7Caca6F61f8fD4a -0x5a0069E211A28cBD1a7dbD585877596FeD07805b -0x19C22f181280dF6Ad1d97285cdD430173Df91C12 +0x0090171f848B2aa86918E5Ef2406Ab3d424fdd83 0x8BAccFF561FDe61D6bC8B6f299fFBa561d2189B9 -0x82e130FF187E787D5DdDFAa4f36CB59e6B1Da6dd -0xEd5166f12FCb48a0804B62FDccB37f59F1F1bc3B -0x36fCf02Fc651c0b7ef2ECA446Dd2405364F85337 0x92aBAD50368175785e4270ca9eFd169c949C4ce1 -0xD007896d9E3e4514a1f1216A91d33a72e15bf5C0 -0xdf3BD218A936A92be5e43592143ecc7a33cef514 -0x0090171f848B2aa86918E5Ef2406Ab3d424fdd83 +0x7A8B94a9fA2bb0581D2EEA2fEd875FCA97494612 0x52753615226F8aC8a464bfecb11Ef798CFF3793f -0x7B2a516Ef6016699c918C95dc57b0427e17d1c70 -0x9c28c8D298ae7Ebf8daA6FA54e1F2909313dB158 -0xc2E4F2038D456AfEFfF2351234BCaFCB6837baC1 -0x7959CF3b8ffC87Faca8aD8a1B5D95c0f58C0BEf8 +0x36fCf02Fc651c0b7ef2ECA446Dd2405364F85337 +0xD076364Fa5de1a4512c58b39ad63DD720B7B9E11 0xa83239cf2b900682001f9144144B5E5e5788A631 +0x19C22f181280dF6Ad1d97285cdD430173Df91C12 +0xE6A251EefaEE70E8645FBAdf21E9B1246e07C374 +0xc2E4F2038D456AfEFfF2351234BCaFCB6837baC1 0x9faB987C9C469EB23Da31B7848B28aCf30905eA8 +0x82e130FF187E787D5DdDFAa4f36CB59e6B1Da6dd +0xdf3BD218A936A92be5e43592143ecc7a33cef514 +0x18DF7d7Cc40928f07d3EF0e5404b41F97e8560Ad +0x5a0069E211A28cBD1a7dbD585877596FeD07805b +0xd9e2F450525079e1e29fB23Bc7Caca6F61f8fD4a +0xe6cd9e7b620964bECd42c7Ad41e56724f515E284 +0xEd5166f12FCb48a0804B62FDccB37f59F1F1bc3B diff --git a/packages/contracts/contracts/da/BVM_EigenDataLayrChain.sol b/packages/contracts/contracts/da/BVM_EigenDataLayrChain.sol index 85c1a2a7b..625375ef8 100644 --- a/packages/contracts/contracts/da/BVM_EigenDataLayrChain.sol +++ b/packages/contracts/contracts/da/BVM_EigenDataLayrChain.sol @@ -11,7 +11,6 @@ import { IDataLayrServiceManager } from "../libraries/eigenda/lib/contracts/inte import { BN254 } from "../libraries/eigenda/BN254.sol"; import { DataStoreUtils } from "../libraries/eigenda/lib/contracts/libraries/DataStoreUtils.sol"; import { Parser } from "../libraries/eigenda/Parse.sol"; -import "hardhat/console.sol"; contract BVM_EigenDataLayrChain is OwnableUpgradeable, ReentrancyGuardUpgradeable, Parser { @@ -61,15 +60,20 @@ contract BVM_EigenDataLayrChain is OwnableUpgradeable, ReentrancyGuardUpgradeabl mapping(uint32 => uint256) public dataStoreIdToRollupStoreNumber; mapping(address => bool) private fraudProofWhitelist; + address public reSubmitterAddress; + uint256 public reRollupIndex; + mapping(uint256 => uint256) public reRollupBatchIndex; event RollupStoreInitialized(uint32 dataStoreId, uint256 stratL2BlockNumber, uint256 endL2BlockNumber); event RollupStoreConfirmed(uint256 rollupBatchIndex, uint32 dataStoreId, uint256 stratL2BlockNumber, uint256 endL2BlockNumber); event RollupStoreReverted(uint256 rollupBatchIndex, uint32 dataStoreId, uint256 stratL2BlockNumber, uint256 endL2BlockNumber); + event ReRollupBatchData(uint256 reRollupIndex, uint256 rollupBatchIndex, uint256 stratL2BlockNumber, uint256 endL2BlockNumber); - function initialize(address _sequencer, address _dataManageAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) public initializer { + function initialize(address _sequencer, address _dataManageAddress, address _reSubmitterAddress, uint256 _block_stale_measure, uint256 _fraudProofPeriod, uint256 _l2SubmittedBlockNumber) public initializer { __Ownable_init(); sequencer = _sequencer; dataManageAddress = _dataManageAddress; + reSubmitterAddress = _reSubmitterAddress; BLOCK_STALE_MEASURE = _block_stale_measure; fraudProofPeriod = _fraudProofPeriod; l2StoredBlockNumber = _l2SubmittedBlockNumber; @@ -180,6 +184,11 @@ contract BVM_EigenDataLayrChain is OwnableUpgradeable, ReentrancyGuardUpgradeabl sequencer = _sequencer; } + function updateReSubmitterAddress(address _reSubmitterAddress) external { + require(msg.sender == sequencer, "Only the sequencer can update re submitter address"); + reSubmitterAddress = _reSubmitterAddress; + } + /** * @notice reset batch rollup batch data * @param _rollupBatchIndex update rollup index @@ -194,6 +203,26 @@ contract BVM_EigenDataLayrChain is OwnableUpgradeable, ReentrancyGuardUpgradeabl l2ConfirmedBlockNumber = 1; } + /** + * @notice submit re-rollup batch index + * @param batchIndex need re-rollup batch index + */ + function submitReRollUpInfo( + uint256 batchIndex + ) external { + require(msg.sender == reSubmitterAddress, "Only the re submitter can submit re rollup data"); + RollupStore memory rStore = rollupBatchIndexRollupStores[batchIndex]; + if (rStore.dataStoreId > 0) { + reRollupBatchIndex[reRollupIndex] = batchIndex; + emit ReRollupBatchData( + reRollupIndex++, + batchIndex, + dataStoreIdToL2RollUpBlock[rStore.dataStoreId].startL2BlockNumber, + dataStoreIdToL2RollUpBlock[rStore.dataStoreId].endBL2BlockNumber + ); + } + } + /** * @notice Called by the (staked) sequencer to pay for a datastore and post some metadata (in the `header` parameter) about it on chain. * Since the sequencer must encode the data before they post the header on chain, they must use a *snapshot* of the number and stakes of DataLayr operators diff --git a/packages/contracts/contracts/test-helpers/TestUpgrade.sol b/packages/contracts/contracts/test-helpers/TestUpgrade.sol index 19029a4b4..217ce7f21 100644 --- a/packages/contracts/contracts/test-helpers/TestUpgrade.sol +++ b/packages/contracts/contracts/test-helpers/TestUpgrade.sol @@ -4,6 +4,8 @@ pragma solidity ^0.8.9; contract Test { int32 public versionNum; + function initialize() public {} + function setVersion() public virtual { versionNum = 1; } @@ -14,6 +16,11 @@ contract Test { } contract TestUpgrade is Test { + int32 public checkNum; + function setCheckNum(int32 _num) public { + checkNum = _num; + } + function setVersion() public override { versionNum = 2; } diff --git a/packages/contracts/deploy/018-BVM_EigenDataLayrChain.deploy.ts b/packages/contracts/deploy/018-BVM_EigenDataLayrChain.deploy.ts index 824400c12..d81eb00cb 100644 --- a/packages/contracts/deploy/018-BVM_EigenDataLayrChain.deploy.ts +++ b/packages/contracts/deploy/018-BVM_EigenDataLayrChain.deploy.ts @@ -14,11 +14,12 @@ const deployFn: DeployFunction = async (hre) => { // const eigenSequencerAddress = hre.deployConfig.bvmSequencerAddress const eigenSequencerAddress = hre.deployConfig.bvmEigenSequencerAddress const dataManagerAddress = hre.deployConfig.dataManagerAddress + const reSubmitterAddress = hre.deployConfig.bvmEigenSequencerAddress const blockStaleMeasure = hre.deployConfig.blockStaleMeasure const daFraudProofPeriod = hre.deployConfig.daFraudProofPeriod const l2SubmittedBlockNumber = hre.deployConfig.l2SubmittedBlockNumber - const args = [eigenSequencerAddress, dataManagerAddress, blockStaleMeasure, daFraudProofPeriod, l2SubmittedBlockNumber] + const args = [eigenSequencerAddress, dataManagerAddress, reSubmitterAddress, blockStaleMeasure, daFraudProofPeriod, l2SubmittedBlockNumber] await deployAndVerifyAndThen({ hre, name: names.managed.da.BVM_EigenDataLayrChain, diff --git a/packages/contracts/genesis/addresses.json b/packages/contracts/genesis/addresses.json index 097ef64c3..f0d3f8cc2 100644 --- a/packages/contracts/genesis/addresses.json +++ b/packages/contracts/genesis/addresses.json @@ -1,22 +1,22 @@ { - "ChainStorageContainer-SCC-batches": "0x7A8B94a9fA2bb0581D2EEA2fEd875FCA97494612", - "StateCommitmentChain": "0xd9e2F450525079e1e29fB23Bc7Caca6F61f8fD4a", - "TestBitToken": "0x5a0069E211A28cBD1a7dbD585877596FeD07805b", - "ChainStorageContainer-CTC-batches": "0x19C22f181280dF6Ad1d97285cdD430173Df91C12", - "Proxy__BVM_L1StandardBridge": "0x8BAccFF561FDe61D6bC8B6f299fFBa561d2189B9", - "TssStakingSlashing": "0x82e130FF187E787D5DdDFAa4f36CB59e6B1Da6dd", - "BVM_L1CrossDomainMessenger": "0xEd5166f12FCb48a0804B62FDccB37f59F1F1bc3B", - "Proxy__TSS_GroupManager": "0x36fCf02Fc651c0b7ef2ECA446Dd2405364F85337", - "Lib_AddressManager": "0x92aBAD50368175785e4270ca9eFd169c949C4ce1", - "AddressDictator": "0xD007896d9E3e4514a1f1216A91d33a72e15bf5C0", - "BVM_EigenDataLayrChain": "0xdf3BD218A936A92be5e43592143ecc7a33cef514", - "CanonicalTransactionChain": "0x0090171f848B2aa86918E5Ef2406Ab3d424fdd83", - "TssGroupManager": "0x52753615226F8aC8a464bfecb11Ef798CFF3793f", - "L1StandardBridge_for_verification_only": "0x7B2a516Ef6016699c918C95dc57b0427e17d1c70", - "ChugSplashDictator": "0x9c28c8D298ae7Ebf8daA6FA54e1F2909313dB158", - "Proxy__BVM_EigenDataLayrChain": "0xc2E4F2038D456AfEFfF2351234BCaFCB6837baC1", - "Proxy__BVM_L1CrossDomainMessenger": "0x7959CF3b8ffC87Faca8aD8a1B5D95c0f58C0BEf8", - "Proxy__TSS_StakingSlashing": "0xa83239cf2b900682001f9144144B5E5e5788A631", - "BondManager": "0x9faB987C9C469EB23Da31B7848B28aCf30905eA8", -"AddressManager": "0x92aBAD50368175785e4270ca9eFd169c949C4ce1" + "ChainStorageContainer-SCC-batches": "0x0090171f848B2aa86918E5Ef2406Ab3d424fdd83", + "StateCommitmentChain": "0x8BAccFF561FDe61D6bC8B6f299fFBa561d2189B9", + "TestBitToken": "0x92aBAD50368175785e4270ca9eFd169c949C4ce1", + "ChainStorageContainer-CTC-batches": "0x7A8B94a9fA2bb0581D2EEA2fEd875FCA97494612", + "Proxy__BVM_L1StandardBridge": "0x52753615226F8aC8a464bfecb11Ef798CFF3793f", + "TssStakingSlashing": "0x36fCf02Fc651c0b7ef2ECA446Dd2405364F85337", + "BVM_L1CrossDomainMessenger": "0xD076364Fa5de1a4512c58b39ad63DD720B7B9E11", + "Proxy__TSS_GroupManager": "0xa83239cf2b900682001f9144144B5E5e5788A631", + "Lib_AddressManager": "0x19C22f181280dF6Ad1d97285cdD430173Df91C12", + "AddressDictator": "0xE6A251EefaEE70E8645FBAdf21E9B1246e07C374", + "BVM_EigenDataLayrChain": "0xc2E4F2038D456AfEFfF2351234BCaFCB6837baC1", + "CanonicalTransactionChain": "0x9faB987C9C469EB23Da31B7848B28aCf30905eA8", + "TssGroupManager": "0x82e130FF187E787D5DdDFAa4f36CB59e6B1Da6dd", + "L1StandardBridge_for_verification_only": "0xdf3BD218A936A92be5e43592143ecc7a33cef514", + "ChugSplashDictator": "0x18DF7d7Cc40928f07d3EF0e5404b41F97e8560Ad", + "Proxy__BVM_EigenDataLayrChain": "0x5a0069E211A28cBD1a7dbD585877596FeD07805b", + "Proxy__BVM_L1CrossDomainMessenger": "0xd9e2F450525079e1e29fB23Bc7Caca6F61f8fD4a", + "Proxy__TSS_StakingSlashing": "0xe6cd9e7b620964bECd42c7Ad41e56724f515E284", + "BondManager": "0xEd5166f12FCb48a0804B62FDccB37f59F1F1bc3B", +"AddressManager": "0x19C22f181280dF6Ad1d97285cdD430173Df91C12" } diff --git a/packages/contracts/genesis/local.json b/packages/contracts/genesis/local.json index c752000f2..b111c9107 100644 --- a/packages/contracts/genesis/local.json +++ b/packages/contracts/genesis/local.json @@ -1,5 +1,9 @@ { - "commit": "c0c59259e57ddc4df602d9a1735e879c4f4c7162", +<<<<<<< HEAD + "commit": "c61a1efdc8517d02ad7a7d5ac64b4eb39a4e4e61", +======= + "commit": "7accccb28a63b7701eaa79033c1aeb914b3395b3", +>>>>>>> feature/ctc-rollup-switch-to-eigenlayer "config": { "chainId": 17, "homesteadBlock": 0, @@ -12,6 +16,7 @@ "istanbulBlock": 0, "muirGlacierBlock": 0, "berlinBlock": 0, + "updateGaslimitBlock": 10, "clique": { "period": 0, "epoch": 30000 @@ -37,7 +42,7 @@ "balance": "00", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000000000000000000000000000000000000000dead", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000007959cf3b8ffc87faca8ad8a1b5d95c0f58c0bef8", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000d9e2f450525079e1e29fb23bc7caca6f61f8fd4a", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x00000000000000000000000000000000000000000000000000000000000186a0" }, "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a71198691161005b578063a71198691461012a578063b1b1b2091461014a578063cbd4ece91461016d578063ecc704281461018057600080fd5b806321d800ec1461008d5780633dbb202b146100c55780636e296e45146100da57806382e3702d14610107575b600080fd5b6100b061009b366004610826565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d3366004610942565b610197565b005b6100e26102e2565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bc565b6100b0610115366004610826565b60026020526000908152604090205460ff1681565b6005546100e29073ffffffffffffffffffffffffffffffffffffffff1681565b6100b0610158366004610826565b60016020526000908152604090205460ff1681565b6100d861017b3660046109ad565b61038b565b61018960035481565b6040519081526020016100bc565b60006101a784338560035461078d565b80516020808301919091206000908152600290915260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fcafa81dc0000000000000000000000000000000000000000000000000000000081529091507342000000000000000000000000000000000000009063cafa81dc9061023c908490600401610a89565b600060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385600354866040516102bc9493929190610aa3565b60405180910390a26001600360008282546102d79190610aef565b909155505050505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1661dead141561036e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1690565b60055473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff161461046a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610365565b60006104788585858561078d565b8051602080830191909120600081815260019092526040909120549192509060ff1615610527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610365565b73ffffffffffffffffffffffffffffffffffffffff8616734200000000000000000000000000000000000000141561059957600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905550610787565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116919091179091556040516000918816906105f2908790610b2e565b6000604051808303816000865af19150503d806000811461062f576040519150601f19603f3d011682016040523d82523d6000602084013e610634565b606091505b5050600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801515600114156106d557600082815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169092179091555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2610701565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b600083334360405160200161071893929190610b4a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600090815291829052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050505b50505050565b6060848484846040516024016107a69493929190610b9c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b60006020828403121561083857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461086357600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126108a857600080fd5b813567ffffffffffffffff808211156108c3576108c3610868565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561090957610909610868565b8160405283815286602085880101111561092257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561095757600080fd5b6109608461083f565b9250602084013567ffffffffffffffff81111561097c57600080fd5b61098886828701610897565b925050604084013563ffffffff811681146109a257600080fd5b809150509250925092565b600080600080608085870312156109c357600080fd5b6109cc8561083f565b93506109da6020860161083f565b9250604085013567ffffffffffffffff8111156109f657600080fd5b610a0287828801610897565b949793965093946060013593505050565b60005b83811015610a2e578181015183820152602001610a16565b838111156107875750506000910152565b60008151808452610a57816020860160208601610a13565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a9c6020830184610a3f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff85168152608060208201526000610ad26080830186610a3f565b905083604083015263ffffffff8316606083015295945050505050565b60008219821115610b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60008251610b40818460208701610a13565b9190910192915050565b60008451610b5c818460208901610a13565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152610bd56080830185610a3f565b90508260608301529594505050505056fea264697066735822122060db5939914765b6ad042b95a40568e91920bfb1eadc40c6a64ec7445e27814a64736f6c63430008090033" @@ -53,14 +58,14 @@ "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000d9e2f450525079e1e29fb23bc7caca6f61f8fd4a" + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000008baccff561fde61d6bc8b6f299ffba561d2189b9" }, "code": "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c80638da5cb5b116100cd578063ea01cd3611610081578063f45e65d811610066578063f45e65d8146102c4578063fc55b138146102cd578063fe173b97146102e057600080fd5b8063ea01cd3614610291578063f2fde38b146102b157600080fd5b8063bf1fe420116100b2578063bf1fe42014610258578063c76478321461026b578063de26c4a11461027e57600080fd5b80638da5cb5b14610206578063bede39b51461024557600080fd5b8063519b4bd311610124578063704655971161010957806370465597146101d8578063715018a6146101eb5780638c8885c8146101f357600080fd5b8063519b4bd3146101c657806355161913146101cf57600080fd5b8063313ce56711610155578063313ce567146101955780633577afc51461019e57806349948e0e146101b357600080fd5b80630c18c162146101715780630d1e43a01461018d575b600080fd5b61017a60035481565b6040519081526020015b60405180910390f35b60065461017a565b61017a60055481565b6101b16101ac366004610ad9565b6102e9565b005b61017a6101c1366004610b21565b610391565b61017a60025481565b61017a60075481565b6101b16101e6366004610ad9565b6103ed565b6101b1610489565b6101b1610201366004610ad9565b6104fc565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101b1610253366004610ad9565b610598565b6101b1610266366004610ad9565b610634565b6101b1610279366004610ad9565b6106d0565b61017a61028c366004610b21565b6107ce565b6008546102209073ffffffffffffffffffffffffffffffffffffffff1681565b6101b16102bf366004610bf0565b610872565b61017a60045481565b6101b16102db366004610ad9565b61096e565b61017a60015481565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60038190556040518181527f32740b35c0ea213650f60d44366b4fb211c9033b50714e4a1d34e65d5beb9bb4906020015b60405180910390a150565b60008061039d836107ce565b90506000600254826103af9190610c5c565b90506000600554600a6103c29190610dbb565b90506000600454836103d49190610c5c565b905060006103e28383610dc7565b979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b60048190556040518181527f3336cd9708eaf2769a0f0dc0679f30e80f15dcd88d1921b5a16858e8b85c591a90602001610386565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b6104fa6000610a64565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b60058190556040518181527fd68112a8707e326d08be3656b528c1bcc5bbbfc47f4177e2179b14d8640838c190602001610386565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b60028190556040518181527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c4490602001610386565b60005473ffffffffffffffffffffffffffffffffffffffff16331461069b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b60018190556040518181527ffcdccc6074c6c42e4bd578aa9870c697dc976a270968452d2b8c8dc369fae39690602001610386565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b808015806107455750806001145b6107915760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642076616c75652c6d7573742062652030206f72203100000000604482015260640161034c565b60068290556040518281527fd1eaae13a99b475ddca546a1b4a45052c66c14049997f44a1731a8e7167981a7906020015b60405180910390a15050565b600080805b835181101561084b578381815181106107ee576107ee610e02565b01602001517fff000000000000000000000000000000000000000000000000000000000000001661082b57610824600483610e31565b9150610839565b610836601083610e31565b91505b8061084381610e49565b9150506107d3565b5060006003548261085c9190610e31565b905061086a81610440610e31565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108d95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b73ffffffffffffffffffffffffffffffffffffffff81166109625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161034c565b61096b81610a64565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b808015806109e35750806001145b610a2f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642076616c75652c6d7573742062652030206f72203100000000604482015260640161034c565b60078290556040518281527f49244d4195584d0644398167ca8caa7b98ee36b674e4b4d2a2640749b27eafb7906020016107c2565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610aeb57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215610b3357600080fd5b813567ffffffffffffffff80821115610b4b57600080fd5b818401915084601f830112610b5f57600080fd5b813581811115610b7157610b71610af2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610bb757610bb7610af2565b81604052828152876020848701011115610bd057600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215610c0257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610c2657600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610c9457610c94610c2d565b500290565b600181815b80851115610cf257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610cd857610cd8610c2d565b80851615610ce557918102915b93841c9390800290610c9e565b509250929050565b600082610d0957506001610db5565b81610d1657506000610db5565b8160018114610d2c5760028114610d3657610d52565b6001915050610db5565b60ff841115610d4757610d47610c2d565b50506001821b610db5565b5060208310610133831016604e8410600b8410161715610d75575081810a610db5565b610d7f8383610c99565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610db157610db1610c2d565b0290505b92915050565b6000610c268383610cfa565b600082610dfd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115610e4457610e44610c2d565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610e7b57610e7b610c2d565b506001019056fea26469706673582212207da82d9f1ffefb5ad9863297e3bb633970d9ab86e98a6bf78a4411e4ca1e9e2864736f6c63430008090033" }, "0x4200000000000000000000000000000000000010": { "balance": "00", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000008baccff561fde61d6bc8b6f299ffba561d2189b9", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000052753615226f8ac8a464bfecb11ef798cff3793f", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000004200000000000000000000000000000000000007" }, "code": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c80633cb747bf116100505780633cb747bf146100ca578063662a633a146100ea578063a3a79548146100fd57600080fd5b806332b7006d1461006c57806336c717c114610081575b600080fd5b61007f61007a366004610d7c565b610110565b005b6001546100a19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000546100a19073ffffffffffffffffffffffffffffffffffffffff1681565b61007f6100f8366004610ded565b610126565b61007f61010b366004610e85565b6106c1565b61011f853333878787876106d8565b5050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1661015e60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f42564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084015b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661025360005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b15801561029857600080fd5b505afa1580156102ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d09190610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f42564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610214565b61039d877f1d1d8b6300000000000000000000000000000000000000000000000000000000610a9f565b801561045357508673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156103ec57600080fd5b505af1158015610400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104249190610f08565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b15610567576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528816906340c10f1990604401600060405180830381600087803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd898888888860405161055a9493929190610f75565b60405180910390a46106b7565b600063a9f9e67560e01b8989888a89898960405160240161058e9796959493929190610fab565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001549091506106339073ffffffffffffffffffffffffffffffffffffffff16600083610ac4565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f7ea89a4591614515571c2b51f5ea06494056f261c10ab1ed8c03c7590d87bce0898989896040516106ad9493929190610f75565b60405180910390a4505b5050505050505050565b6106d0863387878787876106d8565b505050505050565b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff881690639dc29fac90604401600060405180830381600087803b15801561074657600080fd5b505af115801561075a573d6000803e3d6000fd5b5050505060008773ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e09190610f08565b9050606073ffffffffffffffffffffffffffffffffffffffff891673deaddeaddeaddeaddeaddeaddeaddeaddead111114156108d5576040517f1532ec340000000000000000000000000000000000000000000000000000000090610851908a908a908a9089908990602401611008565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050610a01565b73ffffffffffffffffffffffffffffffffffffffff891673deaddeaddeaddeaddeaddeaddeaddeaddead00001415610942576040517f839f0ec60000000000000000000000000000000000000000000000000000000090610851908a908a908a9089908990602401611008565b6040517fa9f9e67500000000000000000000000000000000000000000000000000000000906109819084908c908c908c908c908b908b90602401610fab565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600154610a259073ffffffffffffffffffffffffffffffffffffffff168683610ac4565b3373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8a8a89896040516106ad9493929190610f75565b6000610aaa83610b55565b8015610abb5750610abb8383610bb9565b90505b92915050565b6000546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90610b1e90869085908790600401611083565b600060405180830381600087803b158015610b3857600080fd5b505af1158015610b4c573d6000803e3d6000fd5b50505050505050565b6000610b81827f01ffc9a700000000000000000000000000000000000000000000000000000000610bb9565b8015610abe5750610bb2827fffffffff00000000000000000000000000000000000000000000000000000000610bb9565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff87169061753090610c739086906110ff565b6000604051808303818686fa925050503d8060008114610caf576040519150601f19603f3d011682016040523d82523d6000602084013e610cb4565b606091505b5091509150602081511015610ccf5760009350505050610abe565b818015610ceb575080806020019051810190610ceb919061111b565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d1757600080fd5b50565b803563ffffffff81168114610d2e57600080fd5b919050565b60008083601f840112610d4557600080fd5b50813567ffffffffffffffff811115610d5d57600080fd5b602083019150836020828501011115610d7557600080fd5b9250929050565b600080600080600060808688031215610d9457600080fd5b8535610d9f81610cf5565b945060208601359350610db460408701610d1a565b9250606086013567ffffffffffffffff811115610dd057600080fd5b610ddc88828901610d33565b969995985093965092949392505050565b600080600080600080600060c0888a031215610e0857600080fd5b8735610e1381610cf5565b96506020880135610e2381610cf5565b95506040880135610e3381610cf5565b94506060880135610e4381610cf5565b93506080880135925060a088013567ffffffffffffffff811115610e6657600080fd5b610e728a828b01610d33565b989b979a50959850939692959293505050565b60008060008060008060a08789031215610e9e57600080fd5b8635610ea981610cf5565b95506020870135610eb981610cf5565b945060408701359350610ece60608801610d1a565b9250608087013567ffffffffffffffff811115610eea57600080fd5b610ef689828a01610d33565b979a9699509497509295939492505050565b600060208284031215610f1a57600080fd5b8151610f2581610cf5565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610ceb606083018486610f2c565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152610ffb60c083018486610f2c565b9998505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152611048608083018486610f2c565b979650505050505050565b60005b8381101561106e578181015183820152602001611056565b8381111561107d576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600083518060608401526110be816080850160208801611053565b63ffffffff93909316604083015250601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160160800192915050565b60008251611111818460208701611053565b9190910192915050565b60006020828403121561112d57600080fd5b81518015158114610f2557600080fdfea2646970667358221220c3a18d6cb25a717fc2811d2494b09dcae28c97abb0e1e8f4d4292e1aa816717564736f6c63430008090033" @@ -123,7 +128,7 @@ "0x0000000000000000000000000000000000000000000000000000000000000009": "0x00000000000000000000000000000000000000000000000000000000000f4240", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000420000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000004200000000000000000000000000000000000007", - "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000d9e2f450525079e1e29fb23bc7caca6f61f8fd4a" + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000008baccff561fde61d6bc8b6f299ffba561d2189b9" }, "code": "0x6080604052600436106101635760003560e01c80633cb747bf116100c0578063d8111a5711610074578063ea01cd3611610059578063ea01cd36146103b9578063f2fde38b146103e6578063fad9aba31461040657600080fd5b8063d8111a571461038d578063e5efd585146103a357600080fd5b8063715018a6116100a5578063715018a6146103385780638da5cb5b1461034d578063cfb550f11461037857600080fd5b80633cb747bf146102f65780633ccfd60b1461032357600080fd5b806319d509a11161011757806327c8f835116100fc57806327c8f835146102945780632c79db11146102c15780633b52c31e146102d657600080fd5b806319d509a1146102685780631a39d8ef1461027e57600080fd5b806310a7fd7b1161014857806310a7fd7b146101c6578063110b7eb01461020157806315c6f1661461025357600080fd5b80630b50cd3e1461016f5780630fae75d9146101a457600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061018f61018a3660046111bc565b61041c565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506101c46101bf3660046111de565b6105b0565b005b3480156101d257600080fd5b506101f36101e1366004611280565b60026020526000908152604090205481565b60405190815260200161019b565b34801561020d57600080fd5b5060035461022e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b34801561025f57600080fd5b506101f3610a63565b34801561027457600080fd5b506101f360065481565b34801561028a57600080fd5b506101f360075481565b3480156102a057600080fd5b5060045461022e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102cd57600080fd5b506101f3610a8e565b3480156102e257600080fd5b506101c46102f1366004611280565b610b0d565b34801561030257600080fd5b5060015461022e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032f57600080fd5b506101c4610b79565b34801561034457600080fd5b506101c4610cae565b34801561035957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661022e565b34801561038457600080fd5b506101c4610d1f565b34801561039957600080fd5b506101f360095481565b3480156103af57600080fd5b506101f360085481565b3480156103c557600080fd5b50600a5461022e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506101c46104013660046112bb565b610e68565b34801561041257600080fd5b506101f360055481565b60045460009073ffffffffffffffffffffffffffffffffffffffff1633146104b15760405162461bcd60e51b815260206004820152602760248201527f747373207265776172642063616c6c206d65737361676520756e61757468656e60448201527f746963617465640000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6007544710156105295760405162461bcd60e51b815260206004820152603160248201527f62616c616e6365207265636f726420616e6420636f6e74726163742062616c6160448201527f6e636520617265206e6f7420657175616c00000000000000000000000000000060648201526084016104a8565b600654610537906001611307565b83146105855760405162461bcd60e51b815260206004820152601760248201527f626c6f636b2069642075706461746520696c6c6567616c00000000000000000060448201526064016104a8565b60068390556007546105979083610f61565b6007555060009182526002602052604090912055600190565b600a5473ffffffffffffffffffffffffffffffffffffffff166105e860015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106885760405162461bcd60e51b815260206004820152602e60248201527f42564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084016104a8565b8073ffffffffffffffffffffffffffffffffffffffff166106be60015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b15801561070357600080fd5b505afa158015610717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073b919061131f565b73ffffffffffffffffffffffffffffffffffffffff16146107c45760405162461bcd60e51b815260206004820152603060248201527f42564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d6573736167650000000000000000000000000000000060648201526084016104a8565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d1e43a06040518163ffffffff1660e01b815260040160206040518083038186803b15801561082c57600080fd5b505afa158015610840573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610864919061133c565b60011461087c5761087786868585610f74565b610a5b565b600080600060085460001415610899575050506008849055610a5b565b60085487116109105760405162461bcd60e51b815260206004820152603260248201527f61726773205f626174636854696d65206d757374206774686572207468616e2060448201527f6c617374206c617374426174636854696d65000000000000000000000000000060648201526084016104a8565b60055461091b610a63565b600854610928908a611355565b610932919061136c565b61093c9190611307565b6000600555915061094d828661112f565b925060005b858110156109ea57600087878381811061096e5761096e6113a9565b905060200201602081019061098391906112bb565b905061098f8386610f61565b60405190935073ffffffffffffffffffffffffffffffffffffffff82169086156108fc029087906000818181858888f193505050501580156109d5573d6000803e3d6000fd5b505080806109e2906113d8565b915050610952565b5060006109f7838361113b565b90508015610a1057600554610a0c9082610f61565b6005555b7ff533ef50019763ee9d95ad46e28350b533c11edd472ae7be93e8fae83c1b6d9960085489868a8a604051610a49959493929190611467565b60405180910390a15050506008859055505b505050505050565b6000610a896301e13380600954670de0b6b3a7640000610a83919061136c565b9061112f565b905090565b6000600754471015610b085760405162461bcd60e51b815260206004820152603160248201527f62616c616e6365207265636f726420616e6420636f6e74726163742062616c6160448201527f6e636520617265206e6f7420657175616c00000000000000000000000000000060648201526084016104a8565b504790565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a8565b600955565b60005473ffffffffffffffffffffffffffffffffffffffff163314610be05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a8565b600754471015610c585760405162461bcd60e51b815260206004820152603160248201527f62616c616e6365207265636f726420616e6420636f6e74726163742062616c6160448201527f6e636520617265206e6f7420657175616c00000000000000000000000000000060648201526084016104a8565b60006007554715610cac576000805460405173ffffffffffffffffffffffffffffffffffffffff909116914780156108fc02929091818181858888f19350505050158015610caa573d6000803e3d6000fd5b505b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a8565b610cac6000611147565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a8565b600754471015610dfe5760405162461bcd60e51b815260206004820152603160248201527f62616c616e6365207265636f726420616e6420636f6e74726163742062616c6160448201527f6e636520617265206e6f7420657175616c00000000000000000000000000000060648201526084016104a8565b600554600754610e0e908261113b565b60075560006005558015610caa576000805460055460405173ffffffffffffffffffffffffffffffffffffffff9092169281156108fc029290818181858888f19350505050158015610e64573d6000803e3d6000fd5b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ecf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a8565b73ffffffffffffffffffffffffffffffffffffffff8116610f585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a8565b610caa81611147565b6000610f6d8284611307565b9392505050565b6000806000805b8663ffffffff16811015610fed57610fb860026000610f9a848c611307565b81526020019081526020016000205484610f6190919063ffffffff16565b925060026000610fc8838b611307565b8152602001908152602001600020600090558080610fe5906113d8565b915050610f7b565b5081156110e7576005546110019083611307565b60006005559150611012828561112f565b925060005b848110156110bf576000868683818110611033576110336113a9565b905060200201602081019061104891906112bb565b90506110548386610f61565b600754909350611064908661113b565b60075560405173ffffffffffffffffffffffffffffffffffffffff82169086156108fc029087906000818181858888f193505050501580156110aa573d6000803e3d6000fd5b505080806110b7906113d8565b915050611017565b5060006110cc838361113b565b905080156110e5576005546110e19082610f61565b6005555b505b7f2dae6f3d42a2c50d6baa3ea3f2423a9e1ff0ba26875f8ba6ba25c40df98009fe878785888860405161111e959493929190611498565b60405180910390a150505050505050565b6000610f6d82846114c4565b6000610f6d8284611355565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156111cf57600080fd5b50508035926020909101359150565b6000806000806000608086880312156111f657600080fd5b85359450602086013563ffffffff8116811461121157600080fd5b935060408601359250606086013567ffffffffffffffff8082111561123557600080fd5b818801915088601f83011261124957600080fd5b81358181111561125857600080fd5b8960208260051b850101111561126d57600080fd5b9699959850939650602001949392505050565b60006020828403121561129257600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610caa57600080fd5b6000602082840312156112cd57600080fd5b8135610f6d81611299565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561131a5761131a6112d8565b500190565b60006020828403121561133157600080fd5b8151610f6d81611299565b60006020828403121561134e57600080fd5b5051919050565b600082821015611367576113676112d8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156113a4576113a46112d8565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561140a5761140a6112d8565b5060010190565b8183526000602080850194508260005b8581101561145c57813561143481611299565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611421565b509495945050505050565b85815284602082015283604082015260806060820152600061148d608083018486611411565b979650505050505050565b85815263ffffffff8516602082015283604082015260806060820152600061148d608083018486611411565b6000826114fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220966ea09f223dafcdbfd297d1a3f61aa7ad3d4c160e609139751d66b36b653a0864736f6c63430008090033" } diff --git a/packages/contracts/genesis/state-dump.latest.json b/packages/contracts/genesis/state-dump.latest.json index 69f8dd436..9840d777d 100644 --- a/packages/contracts/genesis/state-dump.latest.json +++ b/packages/contracts/genesis/state-dump.latest.json @@ -1,5 +1,9 @@ { - "commit": "c0c59259e57ddc4df602d9a1735e879c4f4c7162", +<<<<<<< HEAD + "commit": "a9b2338993a860ff562434451b0f3f496502503f", +======= + "commit": "7accccb28a63b7701eaa79033c1aeb914b3395b3", +>>>>>>> feature/ctc-rollup-switch-to-eigenlayer "config": { "chainId": 17, "homesteadBlock": 0, @@ -12,6 +16,7 @@ "istanbulBlock": 0, "muirGlacierBlock": 0, "berlinBlock": 0, + "updateGaslimitBlock": 10, "clique": { "period": 0, "epoch": 30000 @@ -37,7 +42,7 @@ "balance": "00", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000000000000000000000000000000000000000dead", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000007959cf3b8ffc87faca8ad8a1b5d95c0f58c0bef8", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000d9e2f450525079e1e29fb23bc7caca6f61f8fd4a", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x00000000000000000000000000000000000000000000000000000000000186a0" }, "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a71198691161005b578063a71198691461012a578063b1b1b2091461014a578063cbd4ece91461016d578063ecc704281461018057600080fd5b806321d800ec1461008d5780633dbb202b146100c55780636e296e45146100da57806382e3702d14610107575b600080fd5b6100b061009b366004610826565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d3366004610942565b610197565b005b6100e26102e2565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bc565b6100b0610115366004610826565b60026020526000908152604090205460ff1681565b6005546100e29073ffffffffffffffffffffffffffffffffffffffff1681565b6100b0610158366004610826565b60016020526000908152604090205460ff1681565b6100d861017b3660046109ad565b61038b565b61018960035481565b6040519081526020016100bc565b60006101a784338560035461078d565b80516020808301919091206000908152600290915260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fcafa81dc0000000000000000000000000000000000000000000000000000000081529091507342000000000000000000000000000000000000009063cafa81dc9061023c908490600401610a89565b600060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385600354866040516102bc9493929190610aa3565b60405180910390a26001600360008282546102d79190610aef565b909155505050505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1661dead141561036e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1690565b60055473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff161461046a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610365565b60006104788585858561078d565b8051602080830191909120600081815260019092526040909120549192509060ff1615610527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610365565b73ffffffffffffffffffffffffffffffffffffffff8616734200000000000000000000000000000000000000141561059957600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905550610787565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116919091179091556040516000918816906105f2908790610b2e565b6000604051808303816000865af19150503d806000811461062f576040519150601f19603f3d011682016040523d82523d6000602084013e610634565b606091505b5050600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801515600114156106d557600082815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169092179091555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2610701565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b600083334360405160200161071893929190610b4a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600090815291829052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050505b50505050565b6060848484846040516024016107a69493929190610b9c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b60006020828403121561083857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461086357600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126108a857600080fd5b813567ffffffffffffffff808211156108c3576108c3610868565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561090957610909610868565b8160405283815286602085880101111561092257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561095757600080fd5b6109608461083f565b9250602084013567ffffffffffffffff81111561097c57600080fd5b61098886828701610897565b925050604084013563ffffffff811681146109a257600080fd5b809150509250925092565b600080600080608085870312156109c357600080fd5b6109cc8561083f565b93506109da6020860161083f565b9250604085013567ffffffffffffffff8111156109f657600080fd5b610a0287828801610897565b949793965093946060013593505050565b60005b83811015610a2e578181015183820152602001610a16565b838111156107875750506000910152565b60008151808452610a57816020860160208601610a13565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a9c6020830184610a3f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff85168152608060208201526000610ad26080830186610a3f565b905083604083015263ffffffff8316606083015295945050505050565b60008219821115610b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60008251610b40818460208701610a13565b9190910192915050565b60008451610b5c818460208901610a13565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152610bd56080830185610a3f565b90508260608301529594505050505056fea264697066735822122060db5939914765b6ad042b95a40568e91920bfb1eadc40c6a64ec7445e27814a64736f6c63430008090033" @@ -53,14 +58,14 @@ "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000d9e2f450525079e1e29fb23bc7caca6f61f8fd4a" + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000008baccff561fde61d6bc8b6f299ffba561d2189b9" }, "code": "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c80638da5cb5b116100cd578063ea01cd3611610081578063f45e65d811610066578063f45e65d8146102c4578063fc55b138146102cd578063fe173b97146102e057600080fd5b8063ea01cd3614610291578063f2fde38b146102b157600080fd5b8063bf1fe420116100b2578063bf1fe42014610258578063c76478321461026b578063de26c4a11461027e57600080fd5b80638da5cb5b14610206578063bede39b51461024557600080fd5b8063519b4bd311610124578063704655971161010957806370465597146101d8578063715018a6146101eb5780638c8885c8146101f357600080fd5b8063519b4bd3146101c657806355161913146101cf57600080fd5b8063313ce56711610155578063313ce567146101955780633577afc51461019e57806349948e0e146101b357600080fd5b80630c18c162146101715780630d1e43a01461018d575b600080fd5b61017a60035481565b6040519081526020015b60405180910390f35b60065461017a565b61017a60055481565b6101b16101ac366004610ad9565b6102e9565b005b61017a6101c1366004610b21565b610391565b61017a60025481565b61017a60075481565b6101b16101e6366004610ad9565b6103ed565b6101b1610489565b6101b1610201366004610ad9565b6104fc565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101b1610253366004610ad9565b610598565b6101b1610266366004610ad9565b610634565b6101b1610279366004610ad9565b6106d0565b61017a61028c366004610b21565b6107ce565b6008546102209073ffffffffffffffffffffffffffffffffffffffff1681565b6101b16102bf366004610bf0565b610872565b61017a60045481565b6101b16102db366004610ad9565b61096e565b61017a60015481565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60038190556040518181527f32740b35c0ea213650f60d44366b4fb211c9033b50714e4a1d34e65d5beb9bb4906020015b60405180910390a150565b60008061039d836107ce565b90506000600254826103af9190610c5c565b90506000600554600a6103c29190610dbb565b90506000600454836103d49190610c5c565b905060006103e28383610dc7565b979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b60048190556040518181527f3336cd9708eaf2769a0f0dc0679f30e80f15dcd88d1921b5a16858e8b85c591a90602001610386565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b6104fa6000610a64565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b60058190556040518181527fd68112a8707e326d08be3656b528c1bcc5bbbfc47f4177e2179b14d8640838c190602001610386565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b60028190556040518181527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c4490602001610386565b60005473ffffffffffffffffffffffffffffffffffffffff16331461069b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b60018190556040518181527ffcdccc6074c6c42e4bd578aa9870c697dc976a270968452d2b8c8dc369fae39690602001610386565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b808015806107455750806001145b6107915760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642076616c75652c6d7573742062652030206f72203100000000604482015260640161034c565b60068290556040518281527fd1eaae13a99b475ddca546a1b4a45052c66c14049997f44a1731a8e7167981a7906020015b60405180910390a15050565b600080805b835181101561084b578381815181106107ee576107ee610e02565b01602001517fff000000000000000000000000000000000000000000000000000000000000001661082b57610824600483610e31565b9150610839565b610836601083610e31565b91505b8061084381610e49565b9150506107d3565b5060006003548261085c9190610e31565b905061086a81610440610e31565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108d95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b73ffffffffffffffffffffffffffffffffffffffff81166109625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161034c565b61096b81610a64565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034c565b808015806109e35750806001145b610a2f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642076616c75652c6d7573742062652030206f72203100000000604482015260640161034c565b60078290556040518281527f49244d4195584d0644398167ca8caa7b98ee36b674e4b4d2a2640749b27eafb7906020016107c2565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610aeb57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215610b3357600080fd5b813567ffffffffffffffff80821115610b4b57600080fd5b818401915084601f830112610b5f57600080fd5b813581811115610b7157610b71610af2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610bb757610bb7610af2565b81604052828152876020848701011115610bd057600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215610c0257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610c2657600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610c9457610c94610c2d565b500290565b600181815b80851115610cf257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610cd857610cd8610c2d565b80851615610ce557918102915b93841c9390800290610c9e565b509250929050565b600082610d0957506001610db5565b81610d1657506000610db5565b8160018114610d2c5760028114610d3657610d52565b6001915050610db5565b60ff841115610d4757610d47610c2d565b50506001821b610db5565b5060208310610133831016604e8410600b8410161715610d75575081810a610db5565b610d7f8383610c99565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610db157610db1610c2d565b0290505b92915050565b6000610c268383610cfa565b600082610dfd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115610e4457610e44610c2d565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610e7b57610e7b610c2d565b506001019056fea26469706673582212207da82d9f1ffefb5ad9863297e3bb633970d9ab86e98a6bf78a4411e4ca1e9e2864736f6c63430008090033" }, "0x4200000000000000000000000000000000000010": { "balance": "00", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000008baccff561fde61d6bc8b6f299ffba561d2189b9", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000052753615226f8ac8a464bfecb11ef798cff3793f", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000004200000000000000000000000000000000000007" }, "code": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c80633cb747bf116100505780633cb747bf146100ca578063662a633a146100ea578063a3a79548146100fd57600080fd5b806332b7006d1461006c57806336c717c114610081575b600080fd5b61007f61007a366004610d7c565b610110565b005b6001546100a19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000546100a19073ffffffffffffffffffffffffffffffffffffffff1681565b61007f6100f8366004610ded565b610126565b61007f61010b366004610e85565b6106c1565b61011f853333878787876106d8565b5050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1661015e60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f42564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084015b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661025360005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b15801561029857600080fd5b505afa1580156102ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d09190610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f42564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610214565b61039d877f1d1d8b6300000000000000000000000000000000000000000000000000000000610a9f565b801561045357508673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156103ec57600080fd5b505af1158015610400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104249190610f08565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b15610567576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528816906340c10f1990604401600060405180830381600087803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd898888888860405161055a9493929190610f75565b60405180910390a46106b7565b600063a9f9e67560e01b8989888a89898960405160240161058e9796959493929190610fab565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001549091506106339073ffffffffffffffffffffffffffffffffffffffff16600083610ac4565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f7ea89a4591614515571c2b51f5ea06494056f261c10ab1ed8c03c7590d87bce0898989896040516106ad9493929190610f75565b60405180910390a4505b5050505050505050565b6106d0863387878787876106d8565b505050505050565b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff881690639dc29fac90604401600060405180830381600087803b15801561074657600080fd5b505af115801561075a573d6000803e3d6000fd5b5050505060008773ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e09190610f08565b9050606073ffffffffffffffffffffffffffffffffffffffff891673deaddeaddeaddeaddeaddeaddeaddeaddead111114156108d5576040517f1532ec340000000000000000000000000000000000000000000000000000000090610851908a908a908a9089908990602401611008565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050610a01565b73ffffffffffffffffffffffffffffffffffffffff891673deaddeaddeaddeaddeaddeaddeaddeaddead00001415610942576040517f839f0ec60000000000000000000000000000000000000000000000000000000090610851908a908a908a9089908990602401611008565b6040517fa9f9e67500000000000000000000000000000000000000000000000000000000906109819084908c908c908c908c908b908b90602401610fab565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600154610a259073ffffffffffffffffffffffffffffffffffffffff168683610ac4565b3373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8a8a89896040516106ad9493929190610f75565b6000610aaa83610b55565b8015610abb5750610abb8383610bb9565b90505b92915050565b6000546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90610b1e90869085908790600401611083565b600060405180830381600087803b158015610b3857600080fd5b505af1158015610b4c573d6000803e3d6000fd5b50505050505050565b6000610b81827f01ffc9a700000000000000000000000000000000000000000000000000000000610bb9565b8015610abe5750610bb2827fffffffff00000000000000000000000000000000000000000000000000000000610bb9565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff87169061753090610c739086906110ff565b6000604051808303818686fa925050503d8060008114610caf576040519150601f19603f3d011682016040523d82523d6000602084013e610cb4565b606091505b5091509150602081511015610ccf5760009350505050610abe565b818015610ceb575080806020019051810190610ceb919061111b565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d1757600080fd5b50565b803563ffffffff81168114610d2e57600080fd5b919050565b60008083601f840112610d4557600080fd5b50813567ffffffffffffffff811115610d5d57600080fd5b602083019150836020828501011115610d7557600080fd5b9250929050565b600080600080600060808688031215610d9457600080fd5b8535610d9f81610cf5565b945060208601359350610db460408701610d1a565b9250606086013567ffffffffffffffff811115610dd057600080fd5b610ddc88828901610d33565b969995985093965092949392505050565b600080600080600080600060c0888a031215610e0857600080fd5b8735610e1381610cf5565b96506020880135610e2381610cf5565b95506040880135610e3381610cf5565b94506060880135610e4381610cf5565b93506080880135925060a088013567ffffffffffffffff811115610e6657600080fd5b610e728a828b01610d33565b989b979a50959850939692959293505050565b60008060008060008060a08789031215610e9e57600080fd5b8635610ea981610cf5565b95506020870135610eb981610cf5565b945060408701359350610ece60608801610d1a565b9250608087013567ffffffffffffffff811115610eea57600080fd5b610ef689828a01610d33565b979a9699509497509295939492505050565b600060208284031215610f1a57600080fd5b8151610f2581610cf5565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610ceb606083018486610f2c565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152610ffb60c083018486610f2c565b9998505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152611048608083018486610f2c565b979650505050505050565b60005b8381101561106e578181015183820152602001611056565b8381111561107d576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600083518060608401526110be816080850160208801611053565b63ffffffff93909316604083015250601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160160800192915050565b60008251611111818460208701611053565b9190910192915050565b60006020828403121561112d57600080fd5b81518015158114610f2557600080fdfea2646970667358221220c3a18d6cb25a717fc2811d2494b09dcae28c97abb0e1e8f4d4292e1aa816717564736f6c63430008090033" @@ -123,7 +128,7 @@ "0x0000000000000000000000000000000000000000000000000000000000000009": "0x00000000000000000000000000000000000000000000000000000000000f4240", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000420000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000004200000000000000000000000000000000000007", - "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000d9e2f450525079e1e29fb23bc7caca6f61f8fd4a" + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000008baccff561fde61d6bc8b6f299ffba561d2189b9" }, "code": "0x6080604052600436106101635760003560e01c80633cb747bf116100c0578063d8111a5711610074578063ea01cd3611610059578063ea01cd36146103b9578063f2fde38b146103e6578063fad9aba31461040657600080fd5b8063d8111a571461038d578063e5efd585146103a357600080fd5b8063715018a6116100a5578063715018a6146103385780638da5cb5b1461034d578063cfb550f11461037857600080fd5b80633cb747bf146102f65780633ccfd60b1461032357600080fd5b806319d509a11161011757806327c8f835116100fc57806327c8f835146102945780632c79db11146102c15780633b52c31e146102d657600080fd5b806319d509a1146102685780631a39d8ef1461027e57600080fd5b806310a7fd7b1161014857806310a7fd7b146101c6578063110b7eb01461020157806315c6f1661461025357600080fd5b80630b50cd3e1461016f5780630fae75d9146101a457600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061018f61018a3660046111bc565b61041c565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506101c46101bf3660046111de565b6105b0565b005b3480156101d257600080fd5b506101f36101e1366004611280565b60026020526000908152604090205481565b60405190815260200161019b565b34801561020d57600080fd5b5060035461022e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b34801561025f57600080fd5b506101f3610a63565b34801561027457600080fd5b506101f360065481565b34801561028a57600080fd5b506101f360075481565b3480156102a057600080fd5b5060045461022e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102cd57600080fd5b506101f3610a8e565b3480156102e257600080fd5b506101c46102f1366004611280565b610b0d565b34801561030257600080fd5b5060015461022e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032f57600080fd5b506101c4610b79565b34801561034457600080fd5b506101c4610cae565b34801561035957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661022e565b34801561038457600080fd5b506101c4610d1f565b34801561039957600080fd5b506101f360095481565b3480156103af57600080fd5b506101f360085481565b3480156103c557600080fd5b50600a5461022e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506101c46104013660046112bb565b610e68565b34801561041257600080fd5b506101f360055481565b60045460009073ffffffffffffffffffffffffffffffffffffffff1633146104b15760405162461bcd60e51b815260206004820152602760248201527f747373207265776172642063616c6c206d65737361676520756e61757468656e60448201527f746963617465640000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6007544710156105295760405162461bcd60e51b815260206004820152603160248201527f62616c616e6365207265636f726420616e6420636f6e74726163742062616c6160448201527f6e636520617265206e6f7420657175616c00000000000000000000000000000060648201526084016104a8565b600654610537906001611307565b83146105855760405162461bcd60e51b815260206004820152601760248201527f626c6f636b2069642075706461746520696c6c6567616c00000000000000000060448201526064016104a8565b60068390556007546105979083610f61565b6007555060009182526002602052604090912055600190565b600a5473ffffffffffffffffffffffffffffffffffffffff166105e860015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106885760405162461bcd60e51b815260206004820152602e60248201527f42564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084016104a8565b8073ffffffffffffffffffffffffffffffffffffffff166106be60015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b15801561070357600080fd5b505afa158015610717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073b919061131f565b73ffffffffffffffffffffffffffffffffffffffff16146107c45760405162461bcd60e51b815260206004820152603060248201527f42564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d6573736167650000000000000000000000000000000060648201526084016104a8565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d1e43a06040518163ffffffff1660e01b815260040160206040518083038186803b15801561082c57600080fd5b505afa158015610840573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610864919061133c565b60011461087c5761087786868585610f74565b610a5b565b600080600060085460001415610899575050506008849055610a5b565b60085487116109105760405162461bcd60e51b815260206004820152603260248201527f61726773205f626174636854696d65206d757374206774686572207468616e2060448201527f6c617374206c617374426174636854696d65000000000000000000000000000060648201526084016104a8565b60055461091b610a63565b600854610928908a611355565b610932919061136c565b61093c9190611307565b6000600555915061094d828661112f565b925060005b858110156109ea57600087878381811061096e5761096e6113a9565b905060200201602081019061098391906112bb565b905061098f8386610f61565b60405190935073ffffffffffffffffffffffffffffffffffffffff82169086156108fc029087906000818181858888f193505050501580156109d5573d6000803e3d6000fd5b505080806109e2906113d8565b915050610952565b5060006109f7838361113b565b90508015610a1057600554610a0c9082610f61565b6005555b7ff533ef50019763ee9d95ad46e28350b533c11edd472ae7be93e8fae83c1b6d9960085489868a8a604051610a49959493929190611467565b60405180910390a15050506008859055505b505050505050565b6000610a896301e13380600954670de0b6b3a7640000610a83919061136c565b9061112f565b905090565b6000600754471015610b085760405162461bcd60e51b815260206004820152603160248201527f62616c616e6365207265636f726420616e6420636f6e74726163742062616c6160448201527f6e636520617265206e6f7420657175616c00000000000000000000000000000060648201526084016104a8565b504790565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a8565b600955565b60005473ffffffffffffffffffffffffffffffffffffffff163314610be05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a8565b600754471015610c585760405162461bcd60e51b815260206004820152603160248201527f62616c616e6365207265636f726420616e6420636f6e74726163742062616c6160448201527f6e636520617265206e6f7420657175616c00000000000000000000000000000060648201526084016104a8565b60006007554715610cac576000805460405173ffffffffffffffffffffffffffffffffffffffff909116914780156108fc02929091818181858888f19350505050158015610caa573d6000803e3d6000fd5b505b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a8565b610cac6000611147565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a8565b600754471015610dfe5760405162461bcd60e51b815260206004820152603160248201527f62616c616e6365207265636f726420616e6420636f6e74726163742062616c6160448201527f6e636520617265206e6f7420657175616c00000000000000000000000000000060648201526084016104a8565b600554600754610e0e908261113b565b60075560006005558015610caa576000805460055460405173ffffffffffffffffffffffffffffffffffffffff9092169281156108fc029290818181858888f19350505050158015610e64573d6000803e3d6000fd5b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ecf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a8565b73ffffffffffffffffffffffffffffffffffffffff8116610f585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a8565b610caa81611147565b6000610f6d8284611307565b9392505050565b6000806000805b8663ffffffff16811015610fed57610fb860026000610f9a848c611307565b81526020019081526020016000205484610f6190919063ffffffff16565b925060026000610fc8838b611307565b8152602001908152602001600020600090558080610fe5906113d8565b915050610f7b565b5081156110e7576005546110019083611307565b60006005559150611012828561112f565b925060005b848110156110bf576000868683818110611033576110336113a9565b905060200201602081019061104891906112bb565b90506110548386610f61565b600754909350611064908661113b565b60075560405173ffffffffffffffffffffffffffffffffffffffff82169086156108fc029087906000818181858888f193505050501580156110aa573d6000803e3d6000fd5b505080806110b7906113d8565b915050611017565b5060006110cc838361113b565b905080156110e5576005546110e19082610f61565b6005555b505b7f2dae6f3d42a2c50d6baa3ea3f2423a9e1ff0ba26875f8ba6ba25c40df98009fe878785888860405161111e959493929190611498565b60405180910390a150505050505050565b6000610f6d82846114c4565b6000610f6d8284611355565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156111cf57600080fd5b50508035926020909101359150565b6000806000806000608086880312156111f657600080fd5b85359450602086013563ffffffff8116811461121157600080fd5b935060408601359250606086013567ffffffffffffffff8082111561123557600080fd5b818801915088601f83011261124957600080fd5b81358181111561125857600080fd5b8960208260051b850101111561126d57600080fd5b9699959850939650602001949392505050565b60006020828403121561129257600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610caa57600080fd5b6000602082840312156112cd57600080fd5b8135610f6d81611299565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561131a5761131a6112d8565b500190565b60006020828403121561133157600080fd5b8151610f6d81611299565b60006020828403121561134e57600080fd5b5051919050565b600082821015611367576113676112d8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156113a4576113a46112d8565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561140a5761140a6112d8565b5060010190565b8183526000602080850194508260005b8581101561145c57813561143481611299565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611421565b509495945050505050565b85815284602082015283604082015260806060820152600061148d608083018486611411565b979650505050505050565b85815263ffffffff8516602082015283604082015260806060820152600061148d608083018486611411565b6000826114fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220966ea09f223dafcdbfd297d1a3f61aa7ad3d4c160e609139751d66b36b653a0864736f6c63430008090033" }, diff --git a/packages/contracts/tasks/upgrade-task.ts b/packages/contracts/tasks/upgrade-task.ts index 41df52a7a..51ddf9a6f 100644 --- a/packages/contracts/tasks/upgrade-task.ts +++ b/packages/contracts/tasks/upgrade-task.ts @@ -1,7 +1,8 @@ import { task } from 'hardhat/config' import { ethers } from 'ethers' -import { getContractFactory } from '../src/contract-defs' +// @ts-ignore +import { getContractDefinition, getContractFactory } from '../src' task('getOwner') .addParam('contract', 'proxy address') @@ -56,7 +57,7 @@ task('setCode') }) ) - const upgrade = getContractFactory('L1StandardBridgeUpgrade') + const upgrade = getContractDefinition('L1StandardBridgeUpgrade') const upgradeContract = getContractFactory( 'L1StandardBridgeUpgrade' ).attach(taskArgs.contract) @@ -82,22 +83,21 @@ task('setCode') ) }) -task('upgradeTest').setAction(async (taskArgs, hre) => { +task('splashProxyUpgradeTest').setAction(async (taskArgs, hre) => { const accounts = await hre.ethers.getSigners() - const ownerWallet = new ethers.Wallet( '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', accounts[0].provider ) + const l1ChugSplashProxy = getContractFactory('L1ChugSplashProxy') const proxy = await l1ChugSplashProxy .connect(ownerWallet) .deploy(ownerWallet.address) - const testContract = getContractFactory('Test') + const testContract = getContractDefinition('Test') await proxy.connect(ownerWallet).setCode(testContract.deployedBytecode) - console.log(proxy.address) const implementation = await proxy .connect(accounts[0].provider) .callStatic.getImplementation({ @@ -107,11 +107,68 @@ task('upgradeTest').setAction(async (taskArgs, hre) => { const test = getContractFactory('Test').attach(proxy.address) await test.connect(accounts[0]).setVersion() - console.log(await test.connect(accounts[0]).version()) + console.log('Test version', await test.connect(accounts[0]).version()) - const testUpgradeContract = getContractFactory('TestUpgrade') + const testUpgradeContract = getContractDefinition('TestUpgrade') await proxy.connect(ownerWallet).setCode(testUpgradeContract.deployedBytecode) - const testUpgrade = getContractFactory('Test').attach(proxy.address) + + const testUpgrade = getContractFactory('TestUpgrade').attach(proxy.address) await testUpgrade.connect(accounts[0]).setVersion() - console.log(await testUpgrade.connect(accounts[0]).version()) + await testUpgrade.connect(accounts[0]).setCheckNum(11) + console.log( + 'Check number:', + await testUpgrade.connect(accounts[0]).checkNum() + ) + console.log('Test version:', await testUpgrade.connect(accounts[0]).version()) +}) + +task('transparentUpgradea').setAction(async (taskArgs, hre) => { + const accounts = await hre.ethers.getSigners() + const ownerWallet = new ethers.Wallet( + '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', + accounts[0].provider + ) + const testContract = getContractFactory('Test') + const TestContract = await testContract.connect(ownerWallet).deploy() + await TestContract.deployed() + console.log('TestContract : ', TestContract.address) + + const callData = testContract.interface.encodeFunctionData('initialize', []) + + // TransparentUpgradeableProxy + const l1ChugSplashProxy = getContractFactory('TransparentUpgradeableProxy') + const proxy = await l1ChugSplashProxy + .connect(ownerWallet) + .deploy(TestContract.address, ownerWallet.address, callData) + + let implementation = await proxy + .connect(accounts[0].provider) + .callStatic.implementation(); + console.log(implementation) + + const test = getContractFactory('Test').attach(proxy.address) + await test.connect(accounts[1]).setVersion() + console.log('Test version', await test.connect(accounts[1]).version()) + + const testUpgradeContract = getContractFactory('TestUpgrade') + const TestUpgradeContract = await testUpgradeContract + .connect(ownerWallet) + .deploy() + await TestUpgradeContract.deployed() + console.log('TestUpgradeContract : ', TestUpgradeContract.address) + + await proxy.connect(ownerWallet).upgradeTo(TestUpgradeContract.address) + implementation = await proxy + .connect(accounts[0].provider) + .callStatic.implementation() + console.log('Upgrade success,new impl : ', implementation) + + const testUpgrade = getContractFactory('TestUpgrade').attach(proxy.address) + await testUpgrade.connect(accounts[1]).setVersion() + await testUpgrade.connect(accounts[1]).setCheckNum(11) + console.log( + 'Check number:', + await testUpgrade.connect(accounts[1]).checkNum() + ) + console.log('Test version:', await testUpgrade.connect(accounts[1]).version()) }) diff --git a/packages/data-transport-layer/package.json b/packages/data-transport-layer/package.json index ba629ef1c..3874cbdfc 100644 --- a/packages/data-transport-layer/package.json +++ b/packages/data-transport-layer/package.json @@ -36,11 +36,11 @@ "url": "git+https://github.com/mantlenetworkio/mantle.git" }, "dependencies": { + "@ethersproject/providers": "^5.6.8", + "@ethersproject/transactions": "^5.6.2", "@mantleio/common-ts": "0.1.0", "@mantleio/contracts": "0.1.0", "@mantleio/core-utils": "0.1.0", - "@ethersproject/providers": "^5.6.8", - "@ethersproject/transactions": "^5.6.2", "@sentry/node": "^6.3.1", "@sentry/tracing": "^6.3.1", "@types/express": "^4.17.12", @@ -53,7 +53,8 @@ "express": "^4.17.1", "express-prom-bundle": "^6.3.6", "level": "^6.0.1", - "levelup": "^4.4.0" + "levelup": "^4.4.0", + "node-fetch": "^2.6.7" }, "devDependencies": { "@types/cors": "^2.8.9", diff --git a/packages/data-transport-layer/src/db/transport-db.ts b/packages/data-transport-layer/src/db/transport-db.ts index 87a2c6e14..c457d0dbd 100644 --- a/packages/data-transport-layer/src/db/transport-db.ts +++ b/packages/data-transport-layer/src/db/transport-db.ts @@ -1,19 +1,33 @@ /* Imports: External */ +import { start } from 'repl' + import { LevelUp } from 'levelup' import { BigNumber } from 'ethers' import { BatchType } from '@mantleio/core-utils' -/* Imports: Internal */ import { SimpleDB } from './simple-db' import { PATCH_CONTEXTS, BSS_HF1_INDEX } from '../config' import { + DataStoreEntry, EnqueueEntry, + RollupStoreEntry, StateRootBatchEntry, StateRootEntry, TransactionBatchEntry, TransactionEntry, + TransactionListEntry, } from '../types/database-types' + +const TRANSPORT_DA_DB_KEYS = { + BATCH_INDEX: `da:batchindex`, + DATA_STORE_BY_ID: `da:datastorebyid`, + TX_LIST_DS_ID: `da:txlistdsid`, + ROLLUP_STORE_BY_BATCH_INDEX: `da:rollupstorebybatchindex`, + TRANSACTION: `da:transaction`, + BATCH_TRANSACTION_DS_ID:`da:batchtransactiondsid`, +} + const TRANSPORT_DB_KEYS = { ENQUEUE: `enqueue`, ENQUEUE_CTC_INDEX: `ctc:enqueue`, @@ -47,6 +61,125 @@ export class TransportDB { this.opts = opts || {} } + //====================================================================================== + //====================================DA==PART==START=================================== + //====================================================================================== + + public async getLastBatchIndex(): Promise { + return this.db.get(TRANSPORT_DA_DB_KEYS.BATCH_INDEX, 0) + } + + public async putLastBatchIndex(newBatchIndex: number): Promise { + return this.db.put([ + { + key: TRANSPORT_DA_DB_KEYS.BATCH_INDEX, + index: 0, + value: newBatchIndex, + }, + ]) + } + + public async putRollupStoreByBatchIndex( + entry: RollupStoreEntry, + batchIndex: number + ): Promise { + await this.db.put([ + { + key: TRANSPORT_DA_DB_KEYS.ROLLUP_STORE_BY_BATCH_INDEX + batchIndex, + index: 0, + value: entry, + }, + ]) + } + + public async getRollupStoreByBatchIndex( + batchIndex: number + ): Promise { + return this.db.get( + TRANSPORT_DA_DB_KEYS.ROLLUP_STORE_BY_BATCH_INDEX + batchIndex, + 0 + ) + } + + public async putBatchTransactionByDsId( + entries: TransactionEntry[], + dsId: number + ): Promise { + await this._putFullEntries( + TRANSPORT_DA_DB_KEYS.BATCH_TRANSACTION_DS_ID + dsId, + entries + ) + } + + // public async putBatchTransactionByDsId( + // _dsId: number, + // entries: TransactionEntry[] + // ): Promise { + // await this._putEntries(TRANSPORT_DA_DB_KEYS.BATCH_TRANSACTION_DS_ID + _dsId, entries) + // } + + public async getBatchTransactionByDsId( + _dsId: number + ): Promise { + return this.db.get( + TRANSPORT_DA_DB_KEYS.BATCH_TRANSACTION_DS_ID + _dsId,0) + } + + // public async getBatchTxByDataStoreId( + // dsId: number + // ): Promise { + // return await this.getBatchTransactionByDsId(dsId) + // } + + public async getBatchTxByDataStoreId(dsId: number): Promise { + return this._getFullEnties(TRANSPORT_DA_DB_KEYS.BATCH_TRANSACTION_DS_ID + dsId) + } + + public async getDaTransactionByIndex(index: number): Promise { + return this._getEntryByIndex(TRANSPORT_DA_DB_KEYS.TRANSACTION, index) + } + public async getDaLatestTransaction(): Promise { + return this._getLatestEntry(TRANSPORT_DA_DB_KEYS.TRANSACTION) + } + + + public async putTransactions(entries: TransactionEntry[]): Promise { + await this._putEntries(TRANSPORT_DA_DB_KEYS.TRANSACTION, entries) + } + public async getTxListByDSId(dsId: number): Promise { + return this._getFullEnties(TRANSPORT_DA_DB_KEYS.TX_LIST_DS_ID + dsId) + } + + public async putTxListByDSId( + entries: TransactionListEntry[], + dsId: number + ): Promise { + await this._putFullEntries( + TRANSPORT_DA_DB_KEYS.TX_LIST_DS_ID + dsId, + entries + ) + } + + public async putDsById(entry: DataStoreEntry, dsId: number): Promise { + await this.db.put([ + { + key: TRANSPORT_DA_DB_KEYS.DATA_STORE_BY_ID, + index: dsId, + value: entry, + }, + ]) + } + + public async getDsById(dsId: number): Promise { + return this._getEntryNoIndex(TRANSPORT_DA_DB_KEYS.DATA_STORE_BY_ID, dsId) + } + + + + //===================================================================== + //=============================DA===PART==END========================== + //===================================================================== + public async putEnqueueEntries(entries: EnqueueEntry[]): Promise { await this._putEntries(TRANSPORT_DB_KEYS.ENQUEUE, entries) } @@ -356,7 +489,7 @@ export class TransportDB { } } - private async _getLatestEntryIndex(key: string): Promise { + public async _getLatestEntryIndex(key: string): Promise { return this.db.get(`${key}:latest`, 0) || 0 } @@ -410,6 +543,16 @@ export class TransportDB { await this._putLatestEntry(key, entries[entries.length - 1]) } + private async _getEntryNoIndex( + key: string, + index: number + ): Promise { + if (index === null) { + return null + } + return this.db.get(key, index) + } + private async _getEntryByIndex( key: string, index: number @@ -427,4 +570,25 @@ export class TransportDB { ): Promise { return this.db.range(`${key}:index`, startIndex, endIndex) } + + private async _getFullEnties( + key: string + ): Promise { + if (key === null) { + return [] + } + const lastIndex = await this._getLatestEntryIndex(key) + if (lastIndex === null) { + return [] + } + return this._getEntries(key, 0, lastIndex + 1) + } + + private async _putFullEntries( + key: string, + entries: TEntry[] + ): Promise { + await this._putLatestEntryIndex(key, entries.length - 1) + await this._putEntries(key, entries) + } } diff --git a/packages/data-transport-layer/src/services/da-ingestion/handlers/errors.ts b/packages/data-transport-layer/src/services/da-ingestion/handlers/errors.ts new file mode 100644 index 000000000..383fb3f36 --- /dev/null +++ b/packages/data-transport-layer/src/services/da-ingestion/handlers/errors.ts @@ -0,0 +1,10 @@ +export type EventName = + | 'TransactionEnqueued' + | 'SequencerBatchAppended' + | 'StateBatchAppended' + +export class MissingElementError extends Error { + constructor(public name: EventName) { + super(`missing event: ${name}`) + } +} diff --git a/packages/data-transport-layer/src/services/da-ingestion/service.ts b/packages/data-transport-layer/src/services/da-ingestion/service.ts new file mode 100644 index 000000000..e69e6c47d --- /dev/null +++ b/packages/data-transport-layer/src/services/da-ingestion/service.ts @@ -0,0 +1,448 @@ +/* Imports: External */ +import { BigNumber, ethers, constants } from 'ethers' +import { sleep } from '@mantleio/core-utils' +import { BaseService, Metrics } from '@mantleio/common-ts' +import { BaseProvider } from '@ethersproject/providers' +import { LevelUp } from 'levelup' +// eslint-disable-next-line import/order +import { Gauge, Counter } from 'prom-client' + +/* Imports: Internal */ +// import { serialize } from '@ethersproject/transactions' +import fetch from 'node-fetch' +import { MissingElementError } from './handlers/errors' +import { TransportDB } from '../../db/transport-db' +import {parseSignatureVParam, validators} from '../../utils' +import { L1DataTransportServiceOptions } from '../main/service' +import { + TransactionEntry, + DataStoreEntry, + TransactionListEntry, RollupStoreEntry, +} from '../../types' +import { + toHexString, +} from '@mantleio/core-utils' + +interface DaIngestionMetrics { + highestSyncedL1Block: Gauge + missingElementCount: Counter + unhandledErrorCount: Counter +} + +const registerMetrics = ({ + client, + registry, +}: Metrics): DaIngestionMetrics => ({ + highestSyncedL1Block: new client.Gauge({ + name: 'data_transport_layer_synced_da_data', + help: 'Synced DA Data', + registers: [registry], + }), + missingElementCount: new client.Counter({ + name: 'data_transport_layer_da_missing_element_count', + help: 'Number of times recovery from missing elements happens', + registers: [registry], + }), + unhandledErrorCount: new client.Counter({ + name: 'data_transport_layer_da_unhandled_error_count', + help: 'Number of times recovered from unhandled errors', + registers: [registry], + }), +}) + +export interface DaIngestionServiceOptions + extends L1DataTransportServiceOptions { + db: LevelUp + metrics: Metrics +} + +const optionSettings = { + db: { + validate: validators.isLevelUP, + }, + pollingInterval: { + default: 5000, + validate: validators.isInteger, + }, + + dangerouslyCatchAllErrors: { + default: false, + validate: validators.isBoolean, + }, + l1RpcProvider: { + validate: (val: any) => { + return validators.isString(val) || validators.isJsonRpcProvider(val) + }, + }, + l2ChainId: { + validate: validators.isInteger, + }, +} + +export interface Range { + start: number + end: number +} + +export class DaIngestionService extends BaseService { + constructor(options: DaIngestionServiceOptions) { + super('Da_Ingestion_Service', options, optionSettings) + } + + private daIngestionMetrics: DaIngestionMetrics + + private state: { + db: TransportDB + l1RpcProvider: BaseProvider + startingL1BlockNumber: number + mtBatcherFetchUrl: string + } = {} as any + + protected async _init(): Promise { + this.state.db = new TransportDB(this.options.db, { + l2ChainId: this.options.l2ChainId, + }) + + const lastBatchIndex = await this.state.db.getLastBatchIndex() + if (lastBatchIndex <= 0 || lastBatchIndex === null) { + await this.state.db.putLastBatchIndex(this.options.daInitBatch) + } + + this.daIngestionMetrics = registerMetrics(this.metrics) + + this.state.mtBatcherFetchUrl = + this.options.mtBatcherHost + + ':' + + this.options.mtBatcherFetchPort.toString() + } + + protected async _start(): Promise { + while (this.running) { + try { + const batchIndexRange = await this.getBatchIndexRange() + if (batchIndexRange.start >= batchIndexRange.end) { + continue + } + this.logger.info('Synchronizing batch index range from(EigenLayer)', { + start: batchIndexRange.start, + end: batchIndexRange.end, + }) + await this.pareTransaction(batchIndexRange) + await sleep(this.options.daPollingInterval) + } catch (err) { + if (err instanceof MissingElementError) { + this.logger.warn('recovering from a missing event', { + message: err.toString(), + }) + } else if (!this.running || this.options.dangerouslyCatchAllErrors) { + this.daIngestionMetrics.unhandledErrorCount.inc() + this.logger.error('Caught an unhandled error', { + message: err.toString(), + stack: err.stack, + code: err.code, + }) + await sleep(this.options.daPollingInterval) + } else { + throw err + } + } + } + } + + private async pareTransaction(batchIndexRange: Range) { + const dataStore: DataStoreEntry[] = [] + const transactionEntries: TransactionEntry[] = [] + const exploreTransactionEntries: TransactionEntry[] = [] + for ( let index = batchIndexRange.start; index < batchIndexRange.end; index++) { + this.logger.info('Synchronizing transaction from(EigenLayer)', { + index: index + }) + const dataStoreRollupId = await this.GetRollupStoreByRollupBatchIndex(index) + if (dataStoreRollupId['data_store_id'] === 0) { + break + } + const dataStore = await this.GetDataStoreById(dataStoreRollupId['data_store_id'].toString()) + if (dataStore === null) { + break + } + if (dataStore['Confirmed']) { + // explore transaction list + await this._storeTransactionListByDSId(dataStoreRollupId['data_store_id']) + + // batch transaction list + await this._storeBatchTransactionsByDSId(dataStoreRollupId['data_store_id']) + + // put rollup store info to db + await this.state.db.putRollupStoreByBatchIndex( + { + index: 0, + data_store_id: dataStoreRollupId['data_store_id'], + status: dataStoreRollupId['status'], + confirm_at: dataStoreRollupId['confirm_at'], + }, + index + ) + // put data store to db + const dataStoreEntry: DataStoreEntry = { + dataStoreId: dataStore['Id'], + storeNumber: dataStore['StoreNumber'], + durationDataStoreId: dataStore['DurationDataStoreId'], + index: dataStore['Index'], + dataCommitment: dataStore['DataCommitment'], + msgHash: dataStore['MsgHash'], + stakesFromBlockNumber: dataStore['StakesFromBlockNumber'], + initTime: dataStore['InitTime'], + expireTime: dataStore['ExpireTime'], + duration: dataStore['Duration'], + numSys: dataStore['NumSys'], + numPar: dataStore['NumPar'], + degree: dataStore['Degree'], + storePeriodLength: dataStore['StorePeriodLength'], + fee: dataStore['Fee'], + confirmer: dataStore['Confirmer'], + header: dataStore['Header'], + initTxHash: dataStore['InitTxHash'], + initGasUsed: dataStore['InitGasUsed'], + initBlockNumber: dataStore['InitBlockNumber'], + confirmed: dataStore['Confirmed'], + ethSigned: dataStore['EthSigned'], + eigenSigned: dataStore['EigenSigned'], + nonSignerPubKeyHashes: dataStore['NonSignerPubKeyHashes'], + signatoryRecord: dataStore['SignatoryRecord'], + confirmTxHash: dataStore['ConfirmTxHash'], + confirmGasUsed: dataStore['ConfirmGasUsed'], + } + await this.state.db.putDsById(dataStoreEntry, dataStoreRollupId['data_store_id']) + } + await this.state.db.putLastBatchIndex(index) + } + } + + private async getBatchIndexRange(): Promise { + const latestBatchIndex = await this.state.db.getLastBatchIndex() + const newTxBatchIndex: number = await this.GetLatestTransactionBatchIndex() + if (newTxBatchIndex > latestBatchIndex) { + let step = latestBatchIndex + this.options.daSyncStep + if (this.options.daSyncStep > (newTxBatchIndex - latestBatchIndex)) { + step = latestBatchIndex + (newTxBatchIndex - latestBatchIndex) + } + return { + start: latestBatchIndex, + end: step, + } + } else { + return { + start: latestBatchIndex, + end: newTxBatchIndex, + } + } + } + + private async _storeBatchTransactionsByDSId(storeId: number) { + const transactionEntries: TransactionEntry[] = [] + if (storeId <= 0) { + return [] + } + const batchTxs = await this.GetBatchTransactionByDataStoreId(storeId) + .then((rst) => { + return rst + }) + .catch((error) => { + console.log('GetBatchTransactionByDataStoreId error ', error) + return [] + }) + try { + if (batchTxs.length === 0) { + return + } + for (const batchTx of batchTxs) { + const queueOrigin = + batchTx['TxMeta']['queueOrigin'] === 1 ? 'l1' : 'sequencer' + const binaryData = Buffer.from(batchTx['TxMeta']['rawTransaction'], 'base64'); + const txData = '0x'.concat(binaryData.toString('hex')) + const sigR = Buffer.from(batchTx['TxDetail']['r'].replace("0x", '').padStart(64, '0')).toString() + const sigS = Buffer.from(batchTx['TxDetail']['s'].replace("0x", '').padStart(64, '0')).toString() + const decoded = + batchTx['TxMeta']['queueOrigin'] === 1 + ? null + : { + nonce: BigNumber.from(batchTx['TxDetail']['nonce']).toString(), + gasPrice: BigNumber.from(batchTx['TxDetail']['gasPrice']).toString(), + gasLimit: BigNumber.from(batchTx['TxDetail']['gas']).toString(), + value: batchTx['TxDetail']['value'], + target: batchTx['TxDetail']['to'] ? toHexString(batchTx['TxDetail']['to']) : null, + data: batchTx['TxDetail']['input'], + sig: { + v: parseSignatureVParam(BigNumber.from(batchTx['TxDetail']['v']).toNumber(), this.options.l2ChainId), + r: '0x'.concat(sigR), + s: '0x'.concat(sigS), + }, + } + let gasLimit = BigNumber.from(0).toString() + let target = constants.AddressZero + let origin = null + if (batchTx['TxMeta']['queueIndex'] != null) { + const enqueue = await this.state.db.getEnqueueByIndex( + BigNumber.from(batchTx['TxMeta']['queueIndex']).toNumber() + ) + if (enqueue != null) { + gasLimit = enqueue.gasLimit + target = enqueue.target + origin = enqueue.origin + } + } + transactionEntries.push({ + index: batchTx['TxMeta']['index'], + batchIndex: 0, + blockNumber: batchTx['TxMeta']['l1BlockNumber'], + timestamp: batchTx['TxMeta']['l1Timestamp'], + gasLimit: gasLimit, + target: target, + origin: origin, + data: txData, + queueOrigin, + value: batchTx['TxDetail']['value'], + queueIndex: batchTx['TxMeta']['queueIndex'], + decoded: decoded, + confirmed: true, + }) + } + await this.state.db.putTransactions(transactionEntries) + await this.state.db.putBatchTransactionByDsId(transactionEntries, storeId); + }catch (error) { + throw new Error( + `eigen layer sync finish, error is: ${error}` + ) + } + } + + private async _storeTransactionListByDSId(storeId: number): Promise { + const txList = await this.GetTransactionListByStoreNumber(storeId) + if ( + txList === null || + txList.length === 0 || + JSON.stringify(txList) === '{}' + ) { + return + } + + const transactionEntries: TransactionListEntry[] = [] + for (const tx of txList) { + const index_ = transactionEntries.length + transactionEntries.push({ + index: index_, + txIndex: tx['index'], + blockNumber: tx['BlockNumber'], + txHash: tx['TxHash'], + }) + } + await this.state.db.putTxListByDSId(transactionEntries, storeId) + } + + private async GetLatestTransactionBatchIndex(): Promise { + const data = await fetch( + this.state.mtBatcherFetchUrl + '/eigen/getLatestTransactionBatchIndex', + { + method: 'GET', + headers: { Accept: 'application/json' }, + } + ) + .then((res) => res.json()) + .catch((error) => { + console.log( + 'GetLatestTransactionBatchIndex HTTP error : status!=200 error info = ', + error + ) + return 1 + }) + let newTxBatchIndex: number = 1 + if (typeof data === 'number') { + newTxBatchIndex = data + } + return newTxBatchIndex + } + + private async GetRollupStoreByRollupBatchIndex( + batchIndex: number + ): Promise { + const requestData = JSON.stringify({ + batch_index: batchIndex, + }) + // 👇️ const response: Response + return fetch( + this.state.mtBatcherFetchUrl + '/eigen/getRollupStoreByRollupBatchIndex', + { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: requestData, + } + ) + .then((res) => res.json()) + .catch((error) => { + return error + }) + } + + private async GetBatchTransactionByDataStoreId( + storeNumber: number + ): Promise { + const requestData = JSON.stringify({ + store_number: storeNumber, + }) + // 👇️ const response: Response + return fetch( + this.state.mtBatcherFetchUrl + '/dtl/getBatchTransactionByDataStoreId', + { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: requestData, + } + ).then((res) => res.json()).catch((error) => { + console.log( + 'GetBatchTransactionByDataStoreId HTTP error status != 200 ', + error + ) + return error + }) + } + + private async GetDataStoreById(storeNumber: string): Promise { + // 👇️ const response: Response + return ( + fetch(this.state.mtBatcherFetchUrl + '/browser/getDataStoreById', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + store_id: storeNumber, + }), + }) + .then((res) => res.json()) + .catch((error) => { + console.log('GetDataStoreById HTTP error status != 200 ', error) + return error + }) + ) + } + + private async GetTransactionListByStoreNumber( + storeNumber: number + ): Promise { + const requestData = JSON.stringify({ + store_number: storeNumber, + }) + // 👇️ const response: Response + return fetch( + this.state.mtBatcherFetchUrl + '/browser/GetTransactionListByStoreNumber', + { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: requestData, + } + ) + .then((res) => res.json()) + .catch((error) => { + console.log('GetTransactionListByStoreNumber HTTP error status != 200 ') + return error + }) + } +} diff --git a/packages/data-transport-layer/src/services/l1-ingestion/service.ts b/packages/data-transport-layer/src/services/l1-ingestion/service.ts index 6cbba0484..3b77a2bcc 100644 --- a/packages/data-transport-layer/src/services/l1-ingestion/service.ts +++ b/packages/data-transport-layer/src/services/l1-ingestion/service.ts @@ -235,13 +235,15 @@ export class L1IngestionService extends BaseService { handleEventsTransactionEnqueued ) - await this._syncEvents( - 'CanonicalTransactionChain', - 'SequencerBatchAppended', - highestSyncedL1Block, - targetL1Block, - handleEventsSequencerBatchAppended - ) + if (!this.options.eigenUpgradeEnable) { + await this._syncEvents( + 'CanonicalTransactionChain', + 'SequencerBatchAppended', + highestSyncedL1Block, + targetL1Block, + handleEventsSequencerBatchAppended + ) + } await this._syncEvents( 'StateCommitmentChain', diff --git a/packages/data-transport-layer/src/services/main/service.ts b/packages/data-transport-layer/src/services/main/service.ts index da23cb7ff..29632549b 100644 --- a/packages/data-transport-layer/src/services/main/service.ts +++ b/packages/data-transport-layer/src/services/main/service.ts @@ -10,6 +10,7 @@ import { L1TransportServer } from '../server/service' import { validators } from '../../utils' import { L2IngestionService } from '../l2-ingestion/service' import { BSS_HF1_INDEX } from '../../config' +import { DaIngestionService } from "../da-ingestion/service"; export interface L1DataTransportServiceOptions { nodeEnv: string @@ -30,9 +31,17 @@ export interface L1DataTransportServiceOptions { dbPath: string logsPerPollingInterval: number pollingInterval: number + daPollingInterval: number port: number syncFromL1?: boolean syncFromL2?: boolean + syncToDa?: boolean + mtBatcherHost?: string + mtBatcherFetchPort?: number + eigenUpgradeEnable?: boolean + daSyncStep?: number + daInitBatch?: number + transactionsPerPollingInterval: number legacySequencerCompatibility: boolean useSentry?: boolean @@ -64,6 +73,7 @@ export class L1DataTransportService extends BaseService @@ -124,6 +134,17 @@ export class L1DataTransportService extends BaseService { @@ -141,6 +168,7 @@ export class L1DataTransportService extends BaseService { ctcIndex: null, } } - const ctcIndex = await this.state.db.getTransactionIndexByQueueIndex( enqueue.index ) @@ -714,5 +721,184 @@ export class L1TransportServer extends BaseService { } } ) + + this._registerRoute( + 'get', + '/da/getLatestTransactionBatchIndex/', + async (): Promise => { + const latestBatchIndex = await this.state.db.getLastBatchIndex() + + if (latestBatchIndex === null) { + return { + batchIndex: null, + } + } + return { + batchIndex: latestBatchIndex, + } + } + ) + this._registerRoute( + 'get', + '/da/getDataStoreListByBatchIndex/:batchIndex', + async (req): Promise => { + const batch = await this.state.db.getRollupStoreByBatchIndex( + BigNumber.from(req.params.batchIndex).toNumber() + ) + if (batch === null) { + return { + batchIndex: null, + dataStore: null, + } + } + return { + batchIndex: BigNumber.from(req.params.batchIndex).toNumber(), + dataStore: batch, + } + } + ) + this._registerRoute( + 'get', + '/da/getBatchTxsByDataStoreId/:dsId', + async (req): Promise => { + const batchTxs = await this.state.db.getBatchTxByDataStoreId( + BigNumber.from(req.params.dsId).toNumber() + ) + if (batchTxs === null || batchTxs.length === 0) { + return { + dsId: null, + batchTx: [], + } + } + const dsId = BigNumber.from(req.params.dsId).toNumber() + return { + dsId, + batchTx: batchTxs, + } + } + ) + + this._registerRoute( + 'get', + '/da/getDataStoreById/:dsId', + async (req): Promise => { + const dataStore_ = await this.state.db.getDsById( + BigNumber.from(req.params.dsId).toNumber() + ) + + if (dataStore_ === null) { + return { + dataStore: null, + } + } + return { + dataStore: dataStore_, + } + } + ) + this._registerRoute( + 'get', + '/da/transaction/latest', + async (): Promise => { + const transactionEntry = await this.state.db.getDaLatestTransaction( + ) + + if (transactionEntry === null) { + return { + transaction: null, + batch:null + } + } + return { + transaction: transactionEntry, + batch:null + } + } + ) + this._registerRoute( + 'get', + '/da/transaction/index/:index', + async (req): Promise => { + const transactionEntry = await this.state.db.getDaTransactionByIndex( + BigNumber.from(req.params.index).toNumber() + ) + + if (transactionEntry === null) { + return { + transaction: null, + batch:null + } + } + return { + transaction: transactionEntry, + batch:null + } + } + ) + + this._registerRoute( + 'get', + '/da/getTxsListByDsId/:dsId', + async (req): Promise => { + const batchTxs = await this.state.db.getTxListByDSId( + BigNumber.from(req.params.dsId).toNumber() + ) + if (batchTxs === null || batchTxs.length === 0) { + return { + storeId: null, + txList: [], + } + } + return { + storeId: BigNumber.from(req.params.dsId).toNumber(), + txList: batchTxs, + } + } + ) + + this._registerRoute( + 'get', + '/da/test/:batchIndex', + async (): Promise => { + const batchTxs = [ + { + BlockNumber: '1', + TxHash: + '0x5c047ccb63b2f03caa45d6279f0d70f96c44782ce344e0c6e15c57f6316560fc', + }, + { + BlockNumber: '4', + TxHash: + '0xe13cf868cc1702f12a58f1d69083a8cbaf1ec29a5c962cb86f24c02529ce45ee', + }, + ] + + const entries: TransactionListEntry[] = [] + for (const batchTx of batchTxs) { + const index_ = entries.length + entries.push({ + index: index_, + txIndex:batchTx['index'], + blockNumber: batchTx['BlockNumber'], + txHash: batchTx['TxHash'], + }) + } + await this.state.db.putTxListByDSId(entries, 5) + const lens = await this.state.db._getLatestEntryIndex( + 'da:txlistdsid' + 5 + ) + const response = await this.state.db.getTxListByDSId(5) + // await this.state.db.putUpdatedBatchIndex(0) + // await this.state.db.putUpdatedRollupBatchIndex(0) + // await this.state.db.putUpdatedDsId(0) + + + return { + len:lens, + putdata: JSON.stringify(entries), + data: JSON.stringify(response), + } + } + ) } } diff --git a/packages/data-transport-layer/src/types/api-types.ts b/packages/data-transport-layer/src/types/api-types.ts index e3776b095..94fccd9de 100644 --- a/packages/data-transport-layer/src/types/api-types.ts +++ b/packages/data-transport-layer/src/types/api-types.ts @@ -1,10 +1,13 @@ import { + DataStoreEntry, EnqueueEntry, + RollupStoreEntry, StateRootBatchEntry, StateRootEntry, TransactionBatchEntry, TransactionEntry, -} from './database-types' + TransactionListEntry +} from "./database-types"; export type EnqueueResponse = EnqueueEntry & { ctcIndex: number | null @@ -40,6 +43,35 @@ export interface GasPriceResponse { gasPrice: string } +export interface LatestTxBatchIndexResponse { + batchIndex: number +} + +export interface DataStoreListByBatchIndexResponse { + dataStore: RollupStoreEntry + batchIndex: number +} + +export interface BatchTxByDataStoreIdResponse { + dsId: number + batchTx: TransactionEntry[] +} + +export interface DataStoreByIdResponse { + dataStore: DataStoreEntry +} + +export interface TestResponse { + len: number + putdata: string + data: string +} + +export interface TxListByStoreIdResponse { + txList: TransactionListEntry[] + storeId: number +} + export type SyncingResponse = | { syncing: true diff --git a/packages/data-transport-layer/src/types/database-types.ts b/packages/data-transport-layer/src/types/database-types.ts index 50e9ac536..db64a1e47 100644 --- a/packages/data-transport-layer/src/types/database-types.ts +++ b/packages/data-transport-layer/src/types/database-types.ts @@ -22,6 +22,43 @@ export interface EnqueueEntry { timestamp: number } +export interface DataStoreEntry { + index: number + dataStoreId: string + storeNumber: string + durationDataStoreId: string + dataCommitment: string + msgHash: string + stakesFromBlockNumber: string + initTime: string + expireTime: number + duration: number + numSys: string + numPar: string + degree: string + storePeriodLength: string + fee: string + confirmer: string + header: string + initTxHash: string + initGasUsed: string + initBlockNumber: string + confirmed: string + ethSigned: string + eigenSigned: string + nonSignerPubKeyHashes: string + signatoryRecord: string + confirmTxHash: string + confirmGasUsed: string +} + +export interface TransactionListEntry { + index: number + txIndex: number + blockNumber: string + txHash: string +} + export interface TransactionEntry { index: number batchIndex: number @@ -38,6 +75,13 @@ export interface TransactionEntry { confirmed: boolean } +export interface RollupStoreEntry { + index: number + data_store_id: number + status: string + confirm_at: number +} + interface BatchEntry { index: number blockNumber: number diff --git a/yarn.lock b/yarn.lock index 7800e7771..907654548 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2348,7 +2348,7 @@ "@mantleio/contracts@0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@mantleio/contracts/-/contracts-0.1.0.tgz#710f372f6b4b25bc499d599d9b7f644978c3ffd4" + resolved "https://registry.npmjs.org/@mantleio/contracts/-/contracts-0.1.0.tgz" integrity sha512-X79+qigsX55T88Xb9hN53gk1TAO7C67Q8NDVYg3/a566itmze2yXpd4uR9Gl1xK9uTmm2x6A+cYrnTPY9g2SOg== dependencies: "@ethersproject/abstract-provider" "^5.6.1" @@ -2432,7 +2432,7 @@ "@nomicfoundation/ethereumjs-block@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz#fdd5c045e7baa5169abeed0e1202bf94e4481c49" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz" integrity sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA== dependencies: "@nomicfoundation/ethereumjs-common" "^3.0.0" @@ -2462,7 +2462,7 @@ "@nomicfoundation/ethereumjs-blockchain@^6.0.0": version "6.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz#1a8c243a46d4d3691631f139bfb3a4a157187b0c" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz" integrity sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw== dependencies: "@nomicfoundation/ethereumjs-block" "^4.0.0" @@ -2488,7 +2488,7 @@ "@nomicfoundation/ethereumjs-common@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz#f6bcc7753994555e49ab3aa517fc8bcf89c280b9" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz" integrity sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA== dependencies: "@nomicfoundation/ethereumjs-util" "^8.0.0" @@ -2508,7 +2508,7 @@ "@nomicfoundation/ethereumjs-ethash@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz#11539c32fe0990e1122ff987d1b84cfa34774e81" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz" integrity sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew== dependencies: "@nomicfoundation/ethereumjs-block" "^4.0.0" @@ -2534,7 +2534,7 @@ "@nomicfoundation/ethereumjs-evm@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz#99cd173c03b59107c156a69c5e215409098a370b" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz" integrity sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q== dependencies: "@nomicfoundation/ethereumjs-common" "^3.0.0" @@ -2553,7 +2553,7 @@ "@nomicfoundation/ethereumjs-rlp@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz#d9a9c5f0f10310c8849b6525101de455a53e771d" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz" integrity sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw== "@nomicfoundation/ethereumjs-statemanager@1.0.0-rc.3", "@nomicfoundation/ethereumjs-statemanager@^1.0.0-rc.3": @@ -2571,7 +2571,7 @@ "@nomicfoundation/ethereumjs-statemanager@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz#14a9d4e1c828230368f7ab520c144c34d8721e4b" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz" integrity sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ== dependencies: "@nomicfoundation/ethereumjs-common" "^3.0.0" @@ -2594,7 +2594,7 @@ "@nomicfoundation/ethereumjs-trie@^5.0.0": version "5.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz#dcfbe3be53a94bc061c9767a396c16702bc2f5b7" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz" integrity sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A== dependencies: "@nomicfoundation/ethereumjs-rlp" "^4.0.0" @@ -2614,7 +2614,7 @@ "@nomicfoundation/ethereumjs-tx@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz#59dc7452b0862b30342966f7052ab9a1f7802f52" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz" integrity sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w== dependencies: "@nomicfoundation/ethereumjs-common" "^3.0.0" @@ -2632,7 +2632,7 @@ "@nomicfoundation/ethereumjs-util@^8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz#deb2b15d2c308a731e82977aefc4e61ca0ece6c5" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz" integrity sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A== dependencies: "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" @@ -2640,7 +2640,7 @@ "@nomicfoundation/ethereumjs-vm@^6.0.0": version "6.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz#2bb50d332bf41790b01a3767ffec3987585d1de6" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz" integrity sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w== dependencies: "@nomicfoundation/ethereumjs-block" "^4.0.0" @@ -2684,102 +2684,102 @@ "@nomicfoundation/solidity-analyzer-darwin-arm64@0.0.3": version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz#1d49e4ac028831a3011a9f3dca60bd1963185342" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz" integrity sha512-W+bIiNiZmiy+MTYFZn3nwjyPUO6wfWJ0lnXx2zZrM8xExKObMrhCh50yy8pQING24mHfpPFCn89wEB/iG7vZDw== "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz#83a7367342bd053a76d04bbcf4f373fef07cf760" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz" integrity sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw== "@nomicfoundation/solidity-analyzer-darwin-x64@0.0.3": version "0.0.3" - resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz#c0fccecc5506ff5466225e41e65691abafef3dbe" integrity sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw== "@nomicfoundation/solidity-analyzer-darwin-x64@0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz#1225f7da647ae1ad25a87125664704ecc0af6ccc" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz#1225f7da647ae1ad25a87125664704ecc0af6ccc" integrity sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA== "@nomicfoundation/solidity-analyzer-freebsd-x64@0.0.3": version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.0.3.tgz#8261d033f7172b347490cd005931ef8168ab4d73" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.0.3.tgz#8261d033f7172b347490cd005931ef8168ab4d73" integrity sha512-2cR8JNy23jZaO/vZrsAnWCsO73asU7ylrHIe0fEsXbZYqBP9sMr+/+xP3CELDHJxUbzBY8zqGvQt1ULpyrG+Kw== "@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz#dbc052dcdfd50ae50fd5ae1788b69b4e0fa40040" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz#dbc052dcdfd50ae50fd5ae1788b69b4e0fa40040" integrity sha512-WFCZYMv86WowDA4GiJKnebMQRt3kCcFqHeIomW6NMyqiKqhK1kIZCxSLDYsxqlx396kKLPN1713Q1S8tu68GKg== "@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.0.3": version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.0.3.tgz#1ba64b1d76425f8953dedc6367bd7dd46f31dfc5" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.0.3.tgz#1ba64b1d76425f8953dedc6367bd7dd46f31dfc5" integrity sha512-Eyv50EfYbFthoOb0I1568p+eqHGLwEUhYGOxcRNywtlTE9nj+c+MT1LA53HnxD9GsboH4YtOOmJOulrjG7KtbA== "@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz#e6b2eea633995b557e74e881d2a43eab4760903d" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz#e6b2eea633995b557e74e881d2a43eab4760903d" integrity sha512-DTw6MNQWWlCgc71Pq7CEhEqkb7fZnS7oly13pujs4cMH1sR0JzNk90Mp1zpSCsCs4oKan2ClhMlLKtNat/XRKQ== "@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.0.3": version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.0.3.tgz#8d864c49b55e683f7e3b5cce9d10b628797280ac" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.0.3.tgz#8d864c49b55e683f7e3b5cce9d10b628797280ac" integrity sha512-V8grDqI+ivNrgwEt2HFdlwqV2/EQbYAdj3hbOvjrA8Qv+nq4h9jhQUxFpegYMDtpU8URJmNNlXgtfucSrAQwtQ== "@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz#af81107f5afa794f19988a368647727806e18dc4" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz#af81107f5afa794f19988a368647727806e18dc4" integrity sha512-wUpUnR/3GV5Da88MhrxXh/lhb9kxh9V3Jya2NpBEhKDIRCDmtXMSqPMXHZmOR9DfCwCvG6vLFPr/+YrPCnUN0w== "@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.0.3": version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.0.3.tgz#16e769500cf1a8bb42ab9498cee3b93c30f78295" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.0.3.tgz#16e769500cf1a8bb42ab9498cee3b93c30f78295" integrity sha512-uRfVDlxtwT1vIy7MAExWAkRD4r9M79zMG7S09mCrWUn58DbLs7UFl+dZXBX0/8FTGYWHhOT/1Etw1ZpAf5DTrg== "@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz#6877e1da1a06a9f08446070ab6e0a5347109f868" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz#6877e1da1a06a9f08446070ab6e0a5347109f868" integrity sha512-lR0AxK1x/MeKQ/3Pt923kPvwigmGX3OxeU5qNtQ9pj9iucgk4PzhbS3ruUeSpYhUxG50jN4RkIGwUMoev5lguw== "@nomicfoundation/solidity-analyzer-linux-x64-musl@0.0.3": version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.0.3.tgz#75f4e1a25526d54c506e4eba63b3d698b6255b8f" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.0.3.tgz#75f4e1a25526d54c506e4eba63b3d698b6255b8f" integrity sha512-8HPwYdLbhcPpSwsE0yiU/aZkXV43vlXT2ycH+XlOjWOnLfH8C41z0njK8DHRtEFnp4OVN6E7E5lHBBKDZXCliA== "@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz#bb6cd83a0c259eccef4183796b6329a66cf7ebd9" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz#bb6cd83a0c259eccef4183796b6329a66cf7ebd9" integrity sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg== "@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.0.3": version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.0.3.tgz#ef6e20cfad5eedfdb145cc34a44501644cd7d015" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.0.3.tgz#ef6e20cfad5eedfdb145cc34a44501644cd7d015" integrity sha512-5WWcT6ZNvfCuxjlpZOY7tdvOqT1kIQYlDF9Q42wMpZ5aTm4PvjdCmFDDmmTvyXEBJ4WTVmY5dWNWaxy8h/E28g== "@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz#9d4bca1cc9a1333fde985675083b0b7d165f6076" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz#9d4bca1cc9a1333fde985675083b0b7d165f6076" integrity sha512-7x5SXZ9R9H4SluJZZP8XPN+ju7Mx+XeUMWZw7ZAqkdhP5mK19I4vz3x0zIWygmfE8RT7uQ5xMap0/9NPsO+ykw== "@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.0.3": version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.0.3.tgz#98c4e3af9cee68896220fa7e270aefdf7fc89c7b" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.0.3.tgz#98c4e3af9cee68896220fa7e270aefdf7fc89c7b" integrity sha512-P/LWGZwWkyjSwkzq6skvS2wRc3gabzAbk6Akqs1/Iiuggql2CqdLBkcYWL5Xfv3haynhL+2jlNkak+v2BTZI4A== "@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz#0db5bfc6aa952bea4098d8d2c8947b4e5c4337ee" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz#0db5bfc6aa952bea4098d8d2c8947b4e5c4337ee" integrity sha512-m7w3xf+hnE774YRXu+2mGV7RiF3QJtUoiYU61FascCkQhX3QMQavh7saH/vzb2jN5D24nT/jwvaHYX/MAM9zUw== "@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.0.3": version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.0.3.tgz#12da288e7ef17ec14848f19c1e8561fed20d231d" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.0.3.tgz#12da288e7ef17ec14848f19c1e8561fed20d231d" integrity sha512-4AcTtLZG1s/S5mYAIr/sdzywdNwJpOcdStGF3QMBzEt+cGn3MchMaS9b1gyhb2KKM2c39SmPF5fUuWq1oBSQZQ== "@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz#2e0f39a2924dcd77db6b419828595e984fabcb33" + resolved "https://registry.npmmirror.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz#2e0f39a2924dcd77db6b419828595e984fabcb33" integrity sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA== "@nomicfoundation/solidity-analyzer@^0.0.3": @@ -2800,7 +2800,7 @@ "@nomicfoundation/solidity-analyzer@^0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz#e5ddc43ad5c0aab96e5054520d8e16212e125f50" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz" integrity sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg== optionalDependencies: "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.0" @@ -3049,7 +3049,7 @@ "@openzeppelin/contracts@4.3.2": version "4.3.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.3.2.tgz#ff80affd6d352dbe1bbc5b4e1833c41afd6283b6" + resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.3.2.tgz" integrity sha512-AybF1cesONZStg5kWf6ao9OlqTZuPqddvprc0ky7lrUVOjXeKpmQ2Y9FK+6ygxasb+4aic4O5pneFBfwVsRRRg== "@openzeppelin/contracts@^4.3.2": @@ -3064,7 +3064,7 @@ "@openzeppelin/hardhat-upgrades@1.13.0": version "1.13.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.13.0.tgz#c2b6a3e0a1694f877b501003b159cf4550452a8b" + resolved "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.13.0.tgz" integrity sha512-0pSSUimzd4JL/mKhdNcczDGhv6ELPcI8cWWyCYjTwKoI3wL+AnRrbIQ+yrpHVpia3dAmI/+1sLOz70HvFKNzNQ== dependencies: "@openzeppelin/upgrades-core" "^1.11.0" @@ -3072,7 +3072,7 @@ "@openzeppelin/upgrades-core@^1.11.0": version "1.18.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.18.0.tgz#a5db80d15e6b87d45307ad27314c91807a506c00" + resolved "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.18.0.tgz" integrity sha512-fFp5sscGC876yhq7BU595LG45yky21sZFa6cDJigluUjAyJSPoLwF7GD9bSwQMMo4jC7ii1UJBtLipUxN6PVTA== dependencies: cbor "^8.0.0" @@ -5860,7 +5860,7 @@ cbor@^5.0.2: cbor@^8.0.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" + resolved "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz" integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== dependencies: nofilter "^3.1.0" @@ -6386,7 +6386,7 @@ compare-func@^2.0.0: compare-versions@^4.0.0: version "4.1.4" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-4.1.4.tgz#3571f4d610924d4414846a4183d386c8f3d51112" + resolved "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz" integrity sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw== component-emitter@^1.2.1, component-emitter@^1.3.0: @@ -6778,6 +6778,11 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + dateformat@^3.0.0: version "3.0.3" resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" @@ -8359,7 +8364,7 @@ ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.0: ethereumjs-util@^7.0.3: version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== dependencies: "@types/bn.js" "^5.1.0" @@ -8803,6 +8808,14 @@ fault@^1.0.0: dependencies: format "^0.2.0" +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.npmmirror.com/fetch-blob/-/fetch-blob-3.2.0.tgz" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + fetch-ponyfill@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz" @@ -9095,6 +9108,13 @@ format@^0.2.0: resolved "https://registry.npmjs.org/format/-/format-0.2.2.tgz" integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.npmmirror.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + formidable@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz" @@ -9693,7 +9713,7 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5 graceful-fs@^4.2.4: version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== grapheme-splitter@^1.0.4: @@ -9835,7 +9855,7 @@ hardhat@^2.11.1, hardhat@^2.9.6: hardhat@^2.12.0: version "2.12.3" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.12.3.tgz#1824c5d5e2bcc61601bee429053ccecb4dbc0adb" + resolved "https://registry.npmjs.org/hardhat/-/hardhat-2.12.3.tgz" integrity sha512-qxOvRNgQnLqRFssn5f8VP5KN3caytShU0HNeKxmPVK1Ix/0xDVhIC7JOLxG69DjOihUfmxmjqspsHbZvFj6EhQ== dependencies: "@ethersproject/abi" "^5.1.2" @@ -13099,6 +13119,11 @@ node-addon-api@^3.0.2: resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + node-emoji@^1.10.0, node-emoji@^1.4.1: version "1.11.0" resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" @@ -13115,12 +13140,21 @@ node-environment-flags@1.0.6: semver "^5.7.0" node-fetch@^2.6.1, node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + version "2.6.9" + resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.9.tgz" + integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== dependencies: whatwg-url "^5.0.0" +node-fetch@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-3.3.0.tgz" + integrity sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + node-fetch@~1.7.1: version "1.7.3" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz" @@ -13210,7 +13244,7 @@ nofilter@^1.0.4: nofilter@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" + resolved "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz" integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== noms@0.0.0: @@ -14455,7 +14489,7 @@ prop-types@^15.7.2: proper-lockfile@^4.1.1: version "4.1.2" - resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" + resolved "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz" integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== dependencies: graceful-fs "^4.2.4" @@ -15961,7 +15995,7 @@ solhint@^3.3.6: solidity-ast@^0.4.15: version "0.4.35" - resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.35.tgz#82e064b14dc989338123264bde2235cad751f128" + resolved "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.35.tgz" integrity sha512-F5bTDLh3rmDxRmLSrs3qt3nvxJprWSEkS7h2KmuXDx7XTfJ6ZKVTV1rtPIYCqJAuPsU/qa8YUeFn7jdOAZcTPA== solidity-comments-extractor@^0.0.7: @@ -16922,8 +16956,8 @@ tr46@^2.1.0: tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== traverse@^0.6.6: version "0.6.6" @@ -17734,6 +17768,11 @@ wcwidth@^1.0.0, wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +web-streams-polyfill@^3.0.3: + version "3.2.1" + resolved "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz" + integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + web3-bzz@1.2.11: version "1.2.11" resolved "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.11.tgz" @@ -18230,8 +18269,8 @@ web3@1.5.2: webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webidl-conversions@^6.1.0: version "6.1.0" @@ -18269,8 +18308,8 @@ whatwg-fetch@^2.0.4: whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0"