From d3357298902cc0a680f5811dafad2f3ef9f5f78c Mon Sep 17 00:00:00 2001 From: FletcherMan Date: Wed, 4 Dec 2024 12:21:45 +0800 Subject: [PATCH] Pick `removeSkipMap` feature related code and update bindings (#659) Co-authored-by: vincent Co-authored-by: chengwenxi <22697326+chengwenxi@users.noreply.github.com> Co-authored-by: curryxbo Co-authored-by: WorldDogs <33647825+WorldDogs@users.noreply.github.com> --- Makefile | 2 +- ...essagequeuewithgaspriceoracle_deployed.hex | 2 +- bindings/bin/rollup_deployed.hex | 2 +- .../l1messagequeuewithgaspriceoracle.go | 78 ++---- .../l1messagequeuewithgaspriceoracle_more.go | 4 +- bindings/bindings/rollup.go | 29 ++- bindings/bindings/rollup_more.go | 2 +- bindings/go.mod | 2 +- bindings/go.sum | 4 +- .../contracts/l1/rollup/IL1MessageQueue.sol | 10 +- contracts/contracts/l1/rollup/IRollup.sol | 2 - .../L1MessageQueueWithGasPriceOracle.sol | 37 +-- contracts/contracts/l1/rollup/Rollup.sol | 62 +---- .../libraries/codec/BatchHeaderCodecV0.sol | 45 +--- .../libraries/verifier/ISP1Verifier.sol | 2 +- .../libraries/verifier/SP1VerifierPlonk.sol | 12 +- .../libraries/verifier/ZkEvmVerifierV1.sol | 1 - contracts/contracts/lido/L1LidoGateway.sol | 2 +- .../contracts/mock/BatchHeaderCodecTest.sol | 3 +- .../test/L1CrossDomainMessenger.t.sol | 8 +- .../contracts/test/L1CustomERC20Gateway.t.sol | 4 +- .../contracts/test/L1ERC1155Gateway.t.sol | 8 +- .../contracts/test/L1ERC721Gateway.t.sol | 8 +- contracts/contracts/test/L1ETHGateway.t.sol | 4 +- contracts/contracts/test/L1MessageQueue.t.sol | 20 +- .../test/L1StandardERC20Gateway.t.sol | 4 +- contracts/contracts/test/L1WETHGateway.t.sol | 2 +- .../contracts/test/L2CustomERC20Gateway.t.sol | 8 +- .../contracts/test/L2ERC1155Gateway.t.sol | 40 ++- .../contracts/test/L2ERC721Gateway.t.sol | 12 +- .../contracts/test/L2GatewayRouter.t.sol | 38 ++- contracts/contracts/test/Rollup.t.sol | 235 +++--------------- .../contracts/test/ZkEvmVerifierV1.t.sol | 2 +- .../test/base/BatchHeaderCodeV0.t.sol | 4 +- contracts/go.mod | 2 +- contracts/go.sum | 4 +- go-ethereum | 2 +- go.work.sum | 2 + node/core/batch.go | 91 +++---- node/core/config.go | 17 ++ node/core/executor.go | 9 +- node/core/l1_message.go | 37 +-- node/core/l1_message_test.go | 68 +---- node/derivation/batch_info.go | 5 +- node/derivation/derivation.go | 101 +++++--- node/derivation/derivation_test.go | 69 ++--- node/flags/flags.go | 26 ++ node/go.mod | 2 +- node/go.sum | 4 +- node/types/batch.go | 8 +- node/types/consensus_message.go | 5 +- node/types/derivation.go | 6 - ops/docker/.env | 9 +- ops/docker/docker-compose-4nodes.yml | 4 + .../deploy-config/qanet-deploy-config.json | 4 +- ops/l2-genesis/go.mod | 2 +- ops/l2-genesis/go.sum | 4 +- ops/tools/go.mod | 2 +- ops/tools/go.sum | 4 +- oracle/go.mod | 2 +- oracle/go.sum | 6 +- tx-submitter/go.mod | 2 +- tx-submitter/go.sum | 6 +- tx-submitter/services/pendingtx.go | 10 +- tx-submitter/services/pendingtx_test.go | 31 +++ tx-submitter/services/rollup.go | 30 ++- 66 files changed, 487 insertions(+), 785 deletions(-) delete mode 100644 node/types/derivation.go create mode 100644 tx-submitter/services/pendingtx_test.go diff --git a/Makefile b/Makefile index d53102ae7..92026b225 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ ################## update dependencies #################### -ETHEREUM_TARGET_VERSION := morph-v2.0.1 +ETHEREUM_TARGET_VERSION := v1.10.14-0.20241105040223-5c7f1bb7073e TENDERMINT_TARGET_VERSION := v0.3.1 ETHEREUM_MODULE_NAME := github.com/morph-l2/go-ethereum diff --git a/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex b/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex index 029ef9d7a..704b62314 100644 --- a/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex +++ b/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex @@ -1 +1 @@ -0x608060405234801561000f575f80fd5b50600436106101a5575f3560e01c80639b159782116100e8578063d5ad4a9711610093578063e172d3a11161006e578063e172d3a1146103ca578063e3176bd5146103e4578063f2fde38b146103ed578063fd0ad31e14610400575f80fd5b8063d5ad4a9714610391578063d99bc80e146103a4578063da35a26f146103b7575f80fd5b8063bb7862ca116100c3578063bb7862ca14610337578063bdc6f0a014610357578063c27606771461036a575f80fd5b80639b15978214610308578063a85006ca1461031b578063ae453cd514610324575f80fd5b80635f9cd92e116101535780638770d7071161012e5780638770d707146102645780638da5cb5b146102b057806391652461146102ce578063927ede2d146102e1575f80fd5b80635f9cd92e14610236578063715018a6146102495780637d82191a14610251575f80fd5b806355f613ce1161018357806355f613ce146102055780635ad9945a1461021a5780635e45da231461022d575f80fd5b806329aa604b146101a95780633e4cbbe6146101cf5780633e6dada1146101e2575b5f80fd5b6101bc6101b73660046114fc565b610408565b6040519081526020015b60405180910390f35b6101bc6101dd366004611536565b610427565b6101f56101f03660046114fc565b6104db565b60405190151581526020016101c6565b61021861021336600461155e565b610521565b005b6101bc6102283660046115cc565b610715565b6101bc60685481565b610218610244366004611648565b610905565b61021861099a565b6101f561025f3660046114fc565b6109ad565b61028b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff1661028b565b6102186102dc3660046114fc565b6109e0565b61028b7f000000000000000000000000000000000000000000000000000000000000000081565b610218610316366004611661565b610bff565b6101bc60675481565b6101bc6103323660046114fc565b610ce1565b606b5461028b9073ffffffffffffffffffffffffffffffffffffffff1681565b6102186103653660046116b7565b610d57565b61028b7f000000000000000000000000000000000000000000000000000000000000000081565b61021861039f3660046114fc565b610e88565b6102186103b23660046114fc565b610ed6565b6102186103c536600461172a565b610f1c565b6101bc6103d8366004611754565b60100261520801919050565b6101bc60655481565b6102186103fb366004611648565b6110d1565b6066546101bc565b60668181548110610417575f80fd5b5f91825260209091200154905081565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610495573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b99190611793565b156104c557505f6104d5565b6065546104d290836117b9565b90505b92915050565b600881901c5f908152606a6020526040812054600160ff84161b16151580156104d55750600882901c5f90815260696020526040902054600160ff84161b1615156104d5565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146105ab5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008211156105fd5760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016105a2565b826067541461064e5760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016105a2565b600883901c5f818152606a6020526040902080546001851b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0193841660ff871681811b9092179092559092919061010081860111156106c557600182015f908152606a6020526040902061010082900385901c90555b50505081830160675560408051848152602081018490529081018290527fc77f792f838ae38399ac31acc3348389aeb110ce7bedf3cfdbdd5e6679267970906060015b60405180910390a1505050565b5f607e816107bf565b5f8161072c57506001919050565b5b81156107425760089190911c9060010161072d565b919050565b80608083106001811461077f5761075d8461071e565b60808101835360018301925084816020036008021b83528083019250506107a0565b848415166001811461079357848353610798565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b600560405101806107d260018c83610747565b90506107e060018983610747565b90506107ec89826107a8565b90506107fa60018b83610747565b905060018614600181146108625760388710600181146108475761081d8861071e565b8060b701845360018401935088816020036008021b8452808401935050878984379187019161085c565b87608001835360018301925087898437918701915b50610873565b6108705f89355f1a84610747565b91505b5061087e8c826107a8565b90508181035f8060388310600181146108b15761089a8461071e565b60f78101600882021b8517935060010191506108bc565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61090d61116e565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6109a261116e565b6109ab5f6111d5565b565b5f60675482106109be57505f919050565b600882901c5f908152606a6020526040902054600160ff84161b1615156104d5565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610a8b5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016105a2565b6067548110610adc5760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f742064726f702070656e64696e67206d657373616765000000000060448201526064016105a2565b600881901c5f908152606a6020526040902054600160ff83161b16610b435760405162461bcd60e51b815260206004820152601860248201527f64726f70206e6f6e2d736b6970706564206d657373616765000000000000000060448201526064016105a2565b600881901c5f90815260696020526040902054600160ff83161b1615610bab5760405162461bcd60e51b815260206004820152601760248201527f6d65737361676520616c72656164792064726f7070656400000000000000000060448201526064016105a2565b600881901c5f9081526069602052604090208054600160ff84161b1790556040518181527f43a375005206d20a83abc71722cba68c24434a8dc1f583775be7c3fde0396cbf9060200160405180910390a150565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610caa5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016105a2565b610cb583838361124b565b3373111100000000000000000000000000000000111101610cda81865f878787611347565b5050505050565b6066545f908210610d345760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016105a2565b60668281548110610d4757610d476117f5565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610e025760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016105a2565b73ffffffffffffffffffffffffffffffffffffffff86163b15610e675760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016105a2565b610e7283838361124b565b610e80868686868686611347565b505050505050565b610e9061116e565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c591015b60405180910390a15050565b610ede61116e565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610eca565b5f54610100900460ff1615808015610f3a57505f54600160ff909116105b80610f535750303b158015610f5357505f5460ff166001145b610fc55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105a2565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611021575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6110296113f8565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905580156110cc575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610708565b505050565b6110d961116e565b73ffffffffffffffffffffffffffffffffffffffff81166111625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105a2565b61116b816111d5565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109ab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105a2565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6068548311156112c35760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016105a2565b6010810261520801808410156113415760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016105a2565b50505050565b6066545f61135a8883888a898989610715565b606680546001810182555f919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540181905560405190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e906113e6908a9087908b908b908b90611822565b60405180910390a35050505050505050565b5f54610100900460ff166114745760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105a2565b6109ab5f54610100900460ff166114f35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105a2565b6109ab336111d5565b5f6020828403121561150c575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610742575f80fd5b5f8060408385031215611547575f80fd5b61155083611513565b946020939093013593505050565b5f805f60608486031215611570575f80fd5b505081359360208301359350604090920135919050565b5f8083601f840112611597575f80fd5b50813567ffffffffffffffff8111156115ae575f80fd5b6020830191508360208285010111156115c5575f80fd5b9250929050565b5f805f805f805f60c0888a0312156115e2575f80fd5b6115eb88611513565b9650602088013595506040880135945061160760608901611513565b93506080880135925060a088013567ffffffffffffffff811115611629575f80fd5b6116358a828b01611587565b989b979a50959850939692959293505050565b5f60208284031215611658575f80fd5b6104d282611513565b5f805f8060608587031215611674575f80fd5b61167d85611513565b935060208501359250604085013567ffffffffffffffff81111561169f575f80fd5b6116ab87828801611587565b95989497509550505050565b5f805f805f8060a087890312156116cc575f80fd5b6116d587611513565b95506116e360208801611513565b94506040870135935060608701359250608087013567ffffffffffffffff81111561170c575f80fd5b61171889828a01611587565b979a9699509497509295939492505050565b5f806040838503121561173b575f80fd5b8235915061174b60208401611513565b90509250929050565b5f8060208385031215611765575f80fd5b823567ffffffffffffffff81111561177b575f80fd5b61178785828601611587565b90969095509350505050565b5f602082840312156117a3575f80fd5b815180151581146117b2575f80fd5b9392505050565b80820281158282048414176104d5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a +0x608060405234801561000f575f80fd5b506004361061019a575f3560e01c80639b159782116100e8578063d5ad4a9711610093578063e172d3a11161006e578063e172d3a1146103ac578063e3176bd5146103c6578063f2fde38b146103cf578063fd0ad31e146103e2575f80fd5b8063d5ad4a9714610373578063d99bc80e14610386578063da35a26f14610399575f80fd5b8063bb7862ca116100c3578063bb7862ca14610319578063bdc6f0a014610339578063c27606771461034c575f80fd5b80639b159782146102ea578063a85006ca146102fd578063ae453cd514610306575f80fd5b80635f9cd92e116101485780638da5cb5b116101235780638da5cb5b1461029257806391652461146102b0578063927ede2d146102c3575f80fd5b80635f9cd92e1461022b578063715018a61461023e5780638770d70714610246575f80fd5b80633e6dada1116101785780633e6dada1146101ec5780635ad9945a1461020f5780635e45da2314610222575f80fd5b806329aa604b1461019e5780633c7f5283146101c45780633e4cbbe6146101d9575b5f80fd5b6101b16101ac366004611399565b6103ea565b6040519081526020015b60405180910390f35b6101d76101d23660046113b0565b610409565b005b6101b16101e73660046113f3565b61057a565b6101ff6101fa366004611399565b61062e565b60405190151581526020016101bb565b6101b161021d366004611460565b610650565b6101b160685481565b6101d76102393660046114dc565b610840565b6101d76108d5565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bb565b60335473ffffffffffffffffffffffffffffffffffffffff1661026d565b6101d76102be366004611399565b6108e8565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6101d76102f83660046114f5565b610aa0565b6101b160675481565b6101b1610314366004611399565b610b82565b606b5461026d9073ffffffffffffffffffffffffffffffffffffffff1681565b6101d761034736600461154b565b610bf8565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6101d7610381366004611399565b610d29565b6101d7610394366004611399565b610d6f565b6101d76103a73660046115be565b610db5565b6101b16103ba3660046115e8565b60100261520801919050565b6101b160655481565b6101d76103dd3660046114dc565b610f6e565b6066546101b1565b606681815481106103f9575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104935760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008111156104e55760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d657373616765730000000000000000000000604482015260640161048a565b81606754146105365760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d61746368000000000000000000000000604482015260640161048a565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa1580156105e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060c9190611627565b1561061857505f610628565b606554610625908361164d565b90505b92915050565b600881901c5f90815260696020526040812054600160ff84161b161515610628565b5f607e816106fa565b5f8161066757506001919050565b5b811561067d5760089190911c90600101610668565b919050565b8060808310600181146106ba5761069884610659565b60808101835360018301925084816020036008021b83528083019250506106db565b84841516600181146106ce578483536106d3565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061070d60018c83610682565b905061071b60018983610682565b905061072789826106e3565b905061073560018b83610682565b9050600186146001811461079d5760388710600181146107825761075888610659565b8060b701845360018401935088816020036008021b84528084019350508789843791870191610797565b87608001835360018301925087898437918701915b506107ae565b6107ab5f89355f1a84610682565b91505b506107b98c826106e3565b90508181035f8060388310600181146107ec576107d584610659565b60f78101600882021b8517935060010191506107f7565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61084861100b565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108dd61100b565b6108e65f611072565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146109935760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e676572000000000000000000000000000000000000000000606482015260840161048a565b60675481106109e45760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f742064726f702070656e64696e67206d6573736167650000000000604482015260640161048a565b600881901c5f90815260696020526040902054600160ff83161b1615610a4c5760405162461bcd60e51b815260206004820152601760248201527f6d65737361676520616c72656164792064726f70706564000000000000000000604482015260640161048a565b600881901c5f9081526069602052604090208054600160ff84161b1790556040518181527f43a375005206d20a83abc71722cba68c24434a8dc1f583775be7c3fde0396cbf9060200160405180910390a150565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b4b5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e676572000000000000000000000000000000000000000000606482015260840161048a565b610b568383836110e8565b3373111100000000000000000000000000000000111101610b7b81865f8787876111e4565b5050505050565b6066545f908210610bd55760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e6765000000000000604482015260640161048a565b60668281548110610be857610be8611689565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610ca35760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f6174657761790000000000000000000000000000000000000000000000000000606482015260840161048a565b73ffffffffffffffffffffffffffffffffffffffff86163b15610d085760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f41000000000000000000000000000000000000000000000000604482015260640161048a565b610d138383836110e8565b610d218686868686866111e4565b505050505050565b610d3161100b565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c5910161056e565b610d7761100b565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead366329910161056e565b5f54610100900460ff1615808015610dd357505f54600160ff909116105b80610dec5750303b158015610dec57505f5460ff166001145b610e5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161048a565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610eba575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610ec2611295565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610f69575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610f7661100b565b73ffffffffffffffffffffffffffffffffffffffff8116610fff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161048a565b61100881611072565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048a565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6068548311156111605760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d6974000000000000000000000000000000000000000000000000000000606482015260840161048a565b6010810261520801808410156111de5760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e7369632067617300000000000000000000000000606482015260840161048a565b50505050565b6066545f6111f78883888a898989610650565b606680546001810182555f919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540181905560405190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611283908a9087908b908b908b906116b6565b60405180910390a35050505050505050565b5f54610100900460ff166113115760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161048a565b6108e65f54610100900460ff166113905760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161048a565b6108e633611072565b5f602082840312156113a9575f80fd5b5035919050565b5f80604083850312156113c1575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067d575f80fd5b5f8060408385031215611404575f80fd5b61140d836113d0565b946020939093013593505050565b5f8083601f84011261142b575f80fd5b50813567ffffffffffffffff811115611442575f80fd5b602083019150836020828501011115611459575f80fd5b9250929050565b5f805f805f805f60c0888a031215611476575f80fd5b61147f886113d0565b9650602088013595506040880135945061149b606089016113d0565b93506080880135925060a088013567ffffffffffffffff8111156114bd575f80fd5b6114c98a828b0161141b565b989b979a50959850939692959293505050565b5f602082840312156114ec575f80fd5b610625826113d0565b5f805f8060608587031215611508575f80fd5b611511856113d0565b935060208501359250604085013567ffffffffffffffff811115611533575f80fd5b61153f8782880161141b565b95989497509550505050565b5f805f805f8060a08789031215611560575f80fd5b611569876113d0565b9550611577602088016113d0565b94506040870135935060608701359250608087013567ffffffffffffffff8111156115a0575f80fd5b6115ac89828a0161141b565b979a9699509497509295939492505050565b5f80604083850312156115cf575f80fd5b823591506115df602084016113d0565b90509250929050565b5f80602083850312156115f9575f80fd5b823567ffffffffffffffff81111561160f575f80fd5b61161b8582860161141b565b90969095509350505050565b5f60208284031215611637575f80fd5b81518015158114611646575f80fd5b9392505050565b8082028115828204841417610628577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index a123792e3..b23011457 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x608060405260043610610306575f3560e01c806388b1ea0911610191578063b3e0a509116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd146109b1578063f2fde38b146109d0578063fb1e8b04146109ef575f80fd5b8063ddd8a3dc1461095e578063de8b30351461097d578063dff7827e1461099c575f80fd5b8063ce5db8d6116100b7578063ce5db8d614610917578063d279c1911461092c578063d63b35491461094b575f80fd5b8063b3e0a509146108c6578063bedb86fb146108e5578063cd4edc6914610904575f80fd5b8063a479265d1161013c578063b31a77d311610117578063b31a77d314610873578063b348442514610888578063b35dac4e146108a7575f80fd5b8063a479265d14610814578063a4f209b014610829578063abc8d68d14610848575f80fd5b8063910129d41161016c578063910129d41461079657806397fc007c146107c7578063a415d8dc146107e6575f80fd5b806388b1ea09146106b05780638da5cb5b146106c95780638f1d3776146106e6575f80fd5b80632b7ac3f3116102515780635f77cf1d116101fc5780636c578c1d116101d75780636c578c1d1461065e578063715018a61461067d578063728cdbca14610691575f80fd5b80635f77cf1d146105c8578063612672901461061457806368589dfa14610633575f80fd5b806357e0af6c1161022c57806357e0af6c146105325780635c975abb146105515780635ef7a94a14610568575f80fd5b80632b7ac3f3146104c75780633b70c18a146104fe5780633e001b661461051d575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b3660046142d3565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b50610396610391366004614305565b610a04565b005b3480156103a3575f80fd5b506103966103b2366004614363565b610ad6565b3480156103c2575f80fd5b5061033f6103d13660046142d3565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b506103966104083660046143ab565b610e2f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c3660046142d3565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c3660046142d3565b611324565b34801561047c575f80fd5b5061036961048b3660046142d3565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b63660046142d3565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104e6906001600160a01b031681565b6040516001600160a01b03909116815260200161034b565b348015610509575f80fd5b50609b546104e6906001600160a01b031681565b348015610528575f80fd5b5061036960aa5481565b34801561053d575f80fd5b5061039661054c3660046142d3565b611352565b34801561055c575f80fd5b5060655460ff1661033f565b348015610573575f80fd5b506105a86105823660046142d3565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b3480156105d3575f80fd5b506105fb7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b34801561061f575f80fd5b5061039661062e3660046142d3565b6113fd565b34801561063e575f80fd5b5061036961064d3660046142d3565b60ab6020525f908152604090205481565b348015610669575f80fd5b50610396610678366004614305565b611612565b348015610688575f80fd5b506103966116cf565b34801561069c575f80fd5b506103966106ab3660046143ea565b6116e2565b3480156106bb575f80fd5b5060a65461033f9060ff1681565b3480156106d4575f80fd5b506033546001600160a01b03166104e6565b3480156106f1575f80fd5b506107526107003660046142d3565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b3480156107a1575f80fd5b5061033f6107b03660046142d3565b5f90815260a4602052604090206003015460ff1690565b3480156107d2575f80fd5b506103966107e1366004614305565b611a25565b3480156107f1575f80fd5b5061033f610800366004614305565b609f6020525f908152604090205460ff1681565b34801561081f575f80fd5b5061036960995481565b348015610834575f80fd5b506103966108433660046142d3565b611b08565b348015610853575f80fd5b50610369610862366004614305565b60a56020525f908152604090205481565b34801561087e575f80fd5b5061036960a85481565b348015610893575f80fd5b506103966108a2366004614445565b611bb8565b3480156108b2575f80fd5b506103966108c1366004614305565b611dfd565b3480156108d1575f80fd5b506103966108e03660046143ab565b611e56565b3480156108f0575f80fd5b506103966108ff3660046144b9565b6121a6565b6103966109123660046144d4565b612301565b348015610922575f80fd5b5061036960985481565b348015610937575f80fd5b50610396610946366004614305565b6128cd565b61039661095936600461450a565b61298c565b348015610969575f80fd5b506097546104e6906001600160a01b031681565b348015610988575f80fd5b5061033f6109973660046142d3565b6132b6565b3480156109a7575f80fd5b50610369609a5481565b3480156109bc575f80fd5b506103966109cb3660046142d3565b613300565b3480156109db575f80fd5b506103966109ea366004614305565b6133a3565b3480156109fa575f80fd5b5061036960a95481565b610a0c613430565b6001600160a01b0381165f908152609f602052604090205460ff1615610a795760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610ade613430565b5f8111610b2d5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610a70565b5f80610b39858561348a565b915091505f610b4c836001015160c01c90565b5f81815260a160205260409020549091508214610bab5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b5f60a181610bb987856145a4565b81526020019081526020015f205414610c395760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610a70565b609d548111610cb05760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b610cbb6001826145b7565b609e555b8315610e2757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d07816132b6565b15610d62575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d529084906145a4565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610ddf575060a85481145b15610de9575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cbf575b505050505050565b60a85415610e7f5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b610e876134a5565b5f80610e93848461348a565b915091505f610ea6836001015160c01c90565b5f81815260a160205260409020549091508214610f055760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b610f0e81611324565b610f5a5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b610f63816132b6565b15610fb05760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003015460ff16156110115760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610a70565b5f81815260a260205260409020600101544210156110715760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610a70565b605983015160a05f6110846001856145b7565b81526020019081526020015f2054146110df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f81815260a060205260409020541561113a5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610a70565b80609d546001011461118e5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b609d819055600160a35f6111a3866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556111f060f98401601185015160c01c600986015160c01c6134f8565b60a25f6111fe6001846145b7565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061123790846145b7565b81526020019081526020015f205f905560a45f60018361125791906145b7565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611300866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061134c57505f82815260a1602052604090205415155b92915050565b61135a613430565b5f8111801561136b57506099548114155b6113b75760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610a70565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561141d57505f5460ff8083169116105b61148f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556114ca5f5460ff1690565b60ff1660021461151c5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610a70565b8161158f5760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610a70565b609e545f90815260ab60205260409020546115b857609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016113f1565b61161a613430565b6001600160a01b0381165f908152609f602052604090205460ff166116815760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610a70565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610acb565b6116d7613430565b6116e05f6135c1565b565b5f54610100900460ff161580801561170057505f54600160ff909116105b806117195750303b15801561171957505f5460ff166001145b61178b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f805460ff1916600117905580156117c9575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b03861615806117e657506001600160a01b038516155b1561181d576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387166118735760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610a70565b61187b61362a565b6118836136ae565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611a1c575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611a2d613430565b6001600160a01b03811615801590611a535750609c546001600160a01b03828116911614155b611a9f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610a70565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611b10613430565b5f81118015611b20575060648111155b8015611b2e575060a9548114155b611b7a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610a70565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016113f1565b60a85415611c085760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b611c106134a5565b5f80611c1c868661348a565b915091505f611c2f836001015160c01c90565b5f81815260a160205260409020549091508214611c8e5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b611c97816132b6565b611ce35760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff191690556099546002909101544291611d3c916145a4565b11611db2575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152611dad91839190613732565b611a1c565b611dbd83868661388e565b611a1c81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613a41565b611e05613430565b60aa80545f909155611e178282613b0d565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016113f1565b611e5e613430565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415611ed55760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610a70565b5f80611ee1848461348a565b915091505f611ef4836001015160c01c90565b90508015611f445760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610a70565b5f611f50846079015190565b905080611f9f5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610a70565b600984015160c01c15611ff45760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610a70565b5f612000856019015190565b0361204d5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610a70565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612079856039015190565b146120c65760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610a70565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6121ae613430565b80156122cf576121bc613bb8565b60a65460ff161561228e5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916122109084906145a4565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6122d7613c12565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336122b1565b50565b335f908152609f602052604090205460ff1661235f5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610a70565b60a854156123af5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b6123b76134a5565b60a65460ff161561240a5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610a70565b8167ffffffffffffffff16609d54106124655760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a1602052604090205481146124cc5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b6124df8267ffffffffffffffff16611324565b61252b5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b0316156125a65760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a2602052604090206001015442106126365760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610a70565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612686573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126aa91906145ca565b3410156126f95760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161284b91815260200190565b60405180910390a35f609d54600161286391906145a4565b90505b609e5481116128bb578267ffffffffffffffff1681146128a9576099545f82815260a26020526040812060010180549091906128a39084906145a4565b90915550505b806128b3816145e1565b915050612866565b505060a6805460ff1916600117905550565b335f90815260a560205260408120549081900361292c5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610a70565b335f90815260a560205260408120556129458282613b0d565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161298091815260200190565b60405180910390a25050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156129f8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a1c9190614618565b612a685760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a70565b60a85415612ab85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b612ac06134a5565b612acd6020830183614633565b60ff1615612b1d5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610a70565b5f612b2b6040840184614653565b91505080612b7b5760405162461bcd60e51b815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610a70565b6080830135612bcc5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610a70565b60a0830135612c1d5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610a70565b5f80612c34612c2f6020870187614653565b61348a565b915091505f612c47836001015160c01c90565b90505f60a181612c588460016145a4565b81526020019081526020015f205414612cb35760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610a70565b609e548114612d045760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b5f81815260a160205260409020548214612d605760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610a70565b5f81815260ab6020526040902054608087013514612dc05760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f612dcf846011015160c01c90565b90505f8080612e2e612de460408c018c614653565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250889150612e29905060608f018f614653565b613c4b565b948501949384019392509050612e4760608b018b614653565b905061010060ff85010460200214612ea15760405162461bcd60e51b815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610a70565b600194909401935f804915612eb7575f49612ed9565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505f612ee960608d018d614653565b612ef5915060f96145a4565b90506040519850602081028901604052612f23898d5f016020810190612f1b9190614633565b60ff16613dcc565b60c087811b60018b015285811b60098b015286811b60118b015260198a0184905260808d013560598b015260a08d013560798b01528c013560998a0152612f9089612f7160208e018e614653565b604051612f7f9291906146b4565b604051809103902060b99190910152565b60d98901889052612fad89612fa860608f018f614653565b613dd3565b603989018290528089205f88815260a1602090815260408083209390935560ab905290812060a08e0135905560a65460ff16156130135760a7545f90815260a460205260409020600201546099544291613006916145a4565b61301091906145b7565b90505b6040518060800160405280428152602001826098544261303391906145a4565b61303d91906145a4565b815260200161308e8f80604001906130559190614653565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613ddf92505050565b81526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613102573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312691906145ca565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8990556097546001600160a01b031692506374fe27b791508c359061318e90613188908f018f614653565b5f613e36565b5f8e806040019061319f9190614653565b6040518663ffffffff1660e01b81526004016131bf95949392919061470a565b602060405180830381865afa1580156131da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131fe9190614618565b6132705760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061134c5750505f90815260a46020526040902060030154610100900460ff161590565b613308613430565b5f8111801561331957506098548114155b6133655760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610a70565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016113f1565b6133ab613430565b6001600160a01b0381166134275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a70565b6122fe816135c1565b6033546001600160a01b031633146116e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b5f805f6134978585613e8a565b812090969095509350505050565b60655460ff16156116e05760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a70565b805f0361350457505050565b8082035f805b83811015610e275761010081850381111561352457508084035b8651609b546040517f55f613ce0000000000000000000000000000000000000000000000000000000081526004810187905260248101849052604481018390526020909901989194506001600160a01b0316906355f613ce906064015f604051808303815f87803b158015613597575f80fd5b505af11580156135a9573d5f803e3d5ffd5b5050505061010084019350506101008101905061350a565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166136a65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6116e0613f61565b5f54610100900460ff1661372a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6116e0613fe9565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af11580156137b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137da91906145ca565b5f86815260a460205260409020600101549091506137f99082906145a4565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906138389084906145a4565b909155505060405161384b90849061477d565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b806138db5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610a70565b5f6138ea846001015160c01c90565b90505f6138f8856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613927876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a8486139e9885160f81c90565b858888866040518663ffffffff1660e01b8152600401613a0d9594939291906147a9565b5f6040518083038186803b158015613a23575f80fd5b505afa158015613a35573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a954909190606490613a6590846147da565b613a6f91906147f1565b9050613a7b81836145b7565b60aa5f828254613a8b91906145a4565b90915550506001600160a01b0384165f90815260a5602052604081208054839290613ab79084906145a4565b9091555050604051613aca90849061477d565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015613bb4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613b5c576040519150601f19603f3d011682016040523d82523d5f602084013e613b61565b606091505b5050905080613bb25760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610a70565b505b5050565b613bc06134a5565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613bf53390565b6040516001600160a01b03909116815260200160405180910390a1565b613c1a61406e565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613bf5565b60405185515f91829160208901919081908490613c699085906140c0565b90506002840193505f5b81811015613ced57603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f613cc3603c836147da565b613ccd90876145a4565b90505f613cde82603a015160f01c90565b97909701965050600101613c73565b506020850282016040525b8015613db8575f613d0d85603a015160f01c90565b9050613d1d83828d8d8d8d614155565b92505f613d2e866038015160f01c90565b905081811015613d805760405162461bcd60e51b815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610a70565b50998a01999890980197603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613cf8565b508190039020989197509095505050505050565b8082535050565b808260f9850137505050565b5f805f6020840190506002810191505f613dfa8286516140c0565b90505f5b613e096001836145b7565b811015613e1f57603c9390930192600101613dfe565b505f613e2c845160c01c90565b9695505050505050565b60605f80808080613e49888a018a614916565b9550955095509550955050818710613e67579450613e839350505050565b838710613e7b578295505050505050613e83565b509293505050505b9392505050565b5f8160f9811015613edd5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610a70565b6040519150808483378082016040525f613efb836009015160c01c90565b905061010060ff82010460200260f9018214613f595760405162461bcd60e51b815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610a70565b509250929050565b5f54610100900460ff16613fdd5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6065805460ff19169055565b5f54610100900460ff166140655760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6116e0336135c1565b60655460ff166116e05760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a70565b5f6140cc835160f01c90565b9050805f03614107576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614112603c826147da565b61411d9060026145a4565b821461134c576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f855f03614164575085613e2c565b609b546001600160a01b03165f80805b8981101561424a5760ff89169150600889901c811580614192575082155b156141a1578060200288013593505b600184841c165f03614239576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018a90525f906001600160a01b0387169063ae453cd590602401602060405180830381865afa15801561420b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061422f91906145ca565b8d52506020909b019a5b506001988901989788019701614174565b505060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88011681811c600116156142c55760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f7420736b6970206c617374204c31206d65737361676500000000006044820152606401610a70565b509798975050505050505050565b5f602082840312156142e3575f80fd5b5035919050565b80356001600160a01b0381168114614300575f80fd5b919050565b5f60208284031215614315575f80fd5b613e83826142ea565b5f8083601f84011261432e575f80fd5b50813567ffffffffffffffff811115614345575f80fd5b60208301915083602082850101111561435c575f80fd5b9250929050565b5f805f60408486031215614375575f80fd5b833567ffffffffffffffff81111561438b575f80fd5b6143978682870161431e565b909790965060209590950135949350505050565b5f80602083850312156143bc575f80fd5b823567ffffffffffffffff8111156143d2575f80fd5b6143de8582860161431e565b90969095509350505050565b5f805f805f8060c087890312156143ff575f80fd5b614408876142ea565b9550614416602088016142ea565b9450614424604088016142ea565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614458575f80fd5b843567ffffffffffffffff8082111561446f575f80fd5b61447b8883890161431e565b90965094506020870135915080821115614493575f80fd5b506144a08782880161431e565b95989497509550505050565b80151581146122fe575f80fd5b5f602082840312156144c9575f80fd5b8135613e83816144ac565b5f80604083850312156144e5575f80fd5b823567ffffffffffffffff811681146144fc575f80fd5b946020939093013593505050565b5f806040838503121561451b575f80fd5b823567ffffffffffffffff80821115614532575f80fd5b9084019060e08287031215614545575f80fd5b9092506020840135908082111561455a575f80fd5b5083016060818603121561456c575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561134c5761134c614577565b8181038181111561134c5761134c614577565b5f602082840312156145da575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361461157614611614577565b5060010190565b5f60208284031215614628575f80fd5b8151613e83816144ac565b5f60208284031215614643575f80fd5b813560ff81168114613e83575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614686575f80fd5b83018035915067ffffffffffffffff8211156146a0575f80fd5b60200191503681900382131561435c575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156147545784516001600160a01b03168352938301939183019160010161472f565b5050876040860152848103606086015261476f8187896146c3565b9a9950505050505050505050565b5f82515f5b8181101561479c5760208186018101518583015201614782565b505f920191825250919050565b858152846020820152608060408201525f6147c86080830185876146c3565b90508260608301529695505050505050565b808202811582820484141761134c5761134c614577565b5f82614824577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614865575f80fd5b8135602067ffffffffffffffff8083111561488257614882614829565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156148c5576148c5614829565b60405293845260208187018101949081019250878511156148e4575f80fd5b6020870191505b8482101561490b576148fc826142ea565b835291830191908301906148eb565b979650505050505050565b5f805f805f8060c0878903121561492b575f80fd5b86359550602087013567ffffffffffffffff80821115614949575f80fd5b6149558a838b01614856565b9650604089013595506060890135915080821115614971575f80fd5b61497d8a838b01614856565b94506080890135935060a0890135915080821115614999575f80fd5b506149a689828a01614856565b915050929550929550929556fea164736f6c6343000818000a +0x608060405260043610610306575f3560e01c8063728cdbca11610191578063b35dac4e116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd146109b1578063f2fde38b146109d0578063fb1e8b04146109ef575f80fd5b8063ddd8a3dc1461095e578063de8b30351461097d578063dff7827e1461099c575f80fd5b8063cd4edc69116100b7578063cd4edc6914610917578063ce5db8d61461092a578063d279c1911461093f575f80fd5b8063b35dac4e146108ba578063b3e0a509146108d9578063bedb86fb146108f8575f80fd5b8063a415d8dc1161013c578063abc8d68d11610117578063abc8d68d1461085b578063b31a77d314610886578063b34844251461089b575f80fd5b8063a415d8dc146107f9578063a479265d14610827578063a4f209b01461083c575f80fd5b80638f1d37761161016c5780638f1d3776146106f9578063910129d4146107a957806397fc007c146107da575f80fd5b8063728cdbca146106a457806388b1ea09146106c35780638da5cb5b146106dc575f80fd5b80632b7ac3f3116102515780635ef7a94a116101fc57806368589dfa116101d757806368589dfa146106465780636c578c1d14610671578063715018a614610690575f80fd5b80635ef7a94a1461057b5780635f77cf1d146105db5780636126729014610627575f80fd5b80634a8d544f1161022c5780634a8d544f1461053257806357e0af6c146105455780635c975abb14610564575f80fd5b80632b7ac3f3146104c75780633b70c18a146104fe5780633e001b661461051d575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b3660046140f4565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b50610396610391366004614126565b610a04565b005b3480156103a3575f80fd5b506103966103b2366004614184565b610ad6565b3480156103c2575f80fd5b5061033f6103d13660046140f4565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b506103966104083660046141cc565b610e2f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c3660046140f4565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c3660046140f4565b611326565b34801561047c575f80fd5b5061036961048b3660046140f4565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b63660046140f4565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104e6906001600160a01b031681565b6040516001600160a01b03909116815260200161034b565b348015610509575f80fd5b50609b546104e6906001600160a01b031681565b348015610528575f80fd5b5061036960aa5481565b61039661054036600461420b565b611354565b348015610550575f80fd5b5061039661055f3660046140f4565b611bd7565b34801561056f575f80fd5b5060655460ff1661033f565b348015610586575f80fd5b506105bb6105953660046140f4565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b3480156105e6575f80fd5b5061060e7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b348015610632575f80fd5b506103966106413660046140f4565b611c82565b348015610651575f80fd5b506103696106603660046140f4565b60ab6020525f908152604090205481565b34801561067c575f80fd5b5061039661068b366004614126565b611e97565b34801561069b575f80fd5b50610396611f54565b3480156106af575f80fd5b506103966106be366004614278565b611f67565b3480156106ce575f80fd5b5060a65461033f9060ff1681565b3480156106e7575f80fd5b506033546001600160a01b03166104e6565b348015610704575f80fd5b506107656107133660046140f4565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b3480156107b4575f80fd5b5061033f6107c33660046140f4565b5f90815260a4602052604090206003015460ff1690565b3480156107e5575f80fd5b506103966107f4366004614126565b6122aa565b348015610804575f80fd5b5061033f610813366004614126565b609f6020525f908152604090205460ff1681565b348015610832575f80fd5b5061036960995481565b348015610847575f80fd5b506103966108563660046140f4565b61238d565b348015610866575f80fd5b50610369610875366004614126565b60a56020525f908152604090205481565b348015610891575f80fd5b5061036960a85481565b3480156108a6575f80fd5b506103966108b53660046142d3565b61243d565b3480156108c5575f80fd5b506103966108d4366004614126565b612682565b3480156108e4575f80fd5b506103966108f33660046141cc565b6126db565b348015610903575f80fd5b50610396610912366004614347565b612a2b565b610396610925366004614362565b612b86565b348015610935575f80fd5b5061036960985481565b34801561094a575f80fd5b50610396610959366004614126565b613152565b348015610969575f80fd5b506097546104e6906001600160a01b031681565b348015610988575f80fd5b5061033f6109973660046140f4565b613211565b3480156109a7575f80fd5b50610369609a5481565b3480156109bc575f80fd5b506103966109cb3660046140f4565b61325b565b3480156109db575f80fd5b506103966109ea366004614126565b6132fe565b3480156109fa575f80fd5b5061036960a95481565b610a0c61338b565b6001600160a01b0381165f908152609f602052604090205460ff1615610a795760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610ade61338b565b5f8111610b2d5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610a70565b5f80610b3985856133e5565b915091505f610b4c836001015160c01c90565b5f81815260a160205260409020549091508214610bab5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b5f60a181610bb987856143c5565b81526020019081526020015f205414610c395760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610a70565b609d548111610cb05760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b610cbb6001826143d8565b609e555b8315610e2757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d0781613211565b15610d62575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d529084906143c5565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610ddf575060a85481145b15610de9575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cbf575b505050505050565b60a85415610e7f5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b610e87613400565b5f80610e9384846133e5565b915091505f610ea6836001015160c01c90565b5f81815260a160205260409020549091508214610f055760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b610f0e81611326565b610f5a5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b610f6381613211565b15610fb05760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003015460ff16156110115760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610a70565b5f81815260a260205260409020600101544210156110715760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610a70565b605983015160a05f6110846001856143d8565b81526020019081526020015f2054146110df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f81815260a060205260409020541561113a5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610a70565b80609d546001011461118e5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b609d819055600160a35f6111a3866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556111f26111e5846011015160c01c90565b600985015160c01c613453565b60a25f6112006001846143d8565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061123990846143d8565b81526020019081526020015f205f905560a45f60018361125991906143d8565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611302866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061134e57505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156113c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e491906143eb565b6114305760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a70565b60a854156114805760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b611488613400565b6114956020830183614406565b60ff16156114e55760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610a70565b5f6114f36040840184614426565b915050806115435760405162461bcd60e51b815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610a70565b60608301356115945760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610a70565b60808301356115e55760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610a70565b5f806115fc6115f76020870187614426565b6133e5565b915091505f61160f836001015160c01c90565b90505f60a1816116208460016143c5565b81526020019081526020015f20541461167b5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610a70565b609e5481146116cc5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b5f81815260a1602052604090205482146117285760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610a70565b5f81815260ab60205260409020546060870135146117885760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f611797846011015160c01c90565b90505f80806117e96117ac60408c018c614426565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508792508891506135109050565b600196909601959485019493840193925090505f80491561180b575f4961182d565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b60408051611f2081019091529850905060f96118588961185060208f018f614406565b60ff1661368d565b60c087811b60018b015285811b60098b015286901b60118a01526019890183905260608c013560598a015260808c013560798a015260a08c013560998a01526118c7896118a860208e018e614426565b6040516118b6929190614487565b604051809103902060b99190910152565b60d98901889052603989018290528089205f88815260a1602090815260408083209390935560ab905290812060808e0135905560a65460ff16156119345760a7545f90815260a460205260409020600201546099544291611927916143c5565b61193191906143d8565b90505b6040518060800160405280428152602001826098544261195491906143c5565b61195e91906143c5565b81526020016119af8f80604001906119769190614426565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061369492505050565b81526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a479190614496565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8990556097546001600160a01b031692506374fe27b791508c3590611aaf90611aa9908f018f614426565b5f6136eb565b5f8e8060400190611ac09190614426565b6040518663ffffffff1660e01b8152600401611ae09594939291906144f4565b602060405180830381865afa158015611afb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1f91906143eb565b611b915760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b611bdf61338b565b5f81118015611bf057506099548114155b611c3c5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610a70565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611ca257505f5460ff8083169116105b611d145760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d4f5f5460ff1690565b60ff16600214611da15760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610a70565b81611e145760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610a70565b609e545f90815260ab6020526040902054611e3d57609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c76565b611e9f61338b565b6001600160a01b0381165f908152609f602052604090205460ff16611f065760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610a70565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610acb565b611f5c61338b565b611f655f61373f565b565b5f54610100900460ff1615808015611f8557505f54600160ff909116105b80611f9e5750303b158015611f9e57505f5460ff166001145b6120105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f805460ff19166001179055801561204e575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b038616158061206b57506001600160a01b038516155b156120a2576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387166120f85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610a70565b6121006137a8565b61210861382c565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156122a1575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6122b261338b565b6001600160a01b038116158015906122d85750609c546001600160a01b03828116911614155b6123245760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610a70565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61239561338b565b5f811180156123a5575060648111155b80156123b3575060a9548114155b6123ff5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610a70565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c76565b60a8541561248d5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b612495613400565b5f806124a186866133e5565b915091505f6124b4836001015160c01c90565b5f81815260a1602052604090205490915082146125135760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b61251c81613211565b6125685760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff1916905560995460029091015442916125c1916143c5565b11612637575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612632918391906138b0565b6122a1565b612642838686613a0c565b6122a181336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613bbf565b61268a61338b565b60aa80545f90915561269c8282613c8b565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c76565b6126e361338b565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561275a5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610a70565b5f8061276684846133e5565b915091505f612779836001015160c01c90565b905080156127c95760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610a70565b5f6127d5846079015190565b9050806128245760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610a70565b600984015160c01c156128795760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610a70565b5f612885856019015190565b036128d25760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610a70565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146128fe856039015190565b1461294b5760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610a70565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612a3361338b565b8015612b5457612a41613d36565b60a65460ff1615612b135760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612a959084906143c5565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612b5c613d90565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612b36565b50565b335f908152609f602052604090205460ff16612be45760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610a70565b60a85415612c345760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b612c3c613400565b60a65460ff1615612c8f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610a70565b8167ffffffffffffffff16609d5410612cea5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a160205260409020548114612d515760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b612d648267ffffffffffffffff16611326565b612db05760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612e2b5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a260205260409020600101544210612ebb5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610a70565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2f9190614496565b341015612f7e5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516130d091815260200190565b60405180910390a35f609d5460016130e891906143c5565b90505b609e548111613140578267ffffffffffffffff16811461312e576099545f82815260a26020526040812060010180549091906131289084906143c5565b90915550505b8061313881614567565b9150506130eb565b505060a6805460ff1916600117905550565b335f90815260a56020526040812054908190036131b15760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610a70565b335f90815260a560205260408120556131ca8282613c8b565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161320591815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061134e5750505f90815260a46020526040902060030154610100900460ff161590565b61326361338b565b5f8111801561327457506098548114155b6132c05760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610a70565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c76565b61330661338b565b6001600160a01b0381166133825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a70565b612b838161373f565b6033546001600160a01b03163314611f655760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b5f805f6133f28585613dc9565b812090969095509350505050565b60655460ff1615611f655760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a70565b805f0361345e575050565b8082035f5b8281101561350a5761010081840381111561347d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156134e0575f80fd5b505af11580156134f2573d5f803e3d5ffd5b50505050610100830192505061010081019050613463565b50505050565b60405183515f9182916020870191908190849061352e908590613e32565b90506002840193505f5b818110156135b257603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f613588603c8361459e565b61359290876143c5565b90505f6135a382603a015160f01c90565b97909701965050600101613538565b506020850282016040525b801561367b575f6135d285603a015160f01c90565b90506135e083828b8b613ec7565b92505f6135f1866038015160f01c90565b9050818110156136435760405162461bcd60e51b815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610a70565b50978801979690960195603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016135bd565b50819003902096919550909350505050565b8082535050565b5f805f6020840190506002810191505f6136af828651613e32565b90505f5b6136be6001836143d8565b8110156136d457603c93909301926001016136b3565b505f6136e1845160c01c90565b9695505050505050565b60605f808080806136fe888a018a6146a2565b955095509550955095505081871061371c5794506137389350505050565b838710613730578295505050505050613738565b509293505050505b9392505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166138245760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f65613f95565b5f54610100900460ff166138a85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f6561401d565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613934573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139589190614496565b5f86815260a460205260409020600101549091506139779082906143c5565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906139b69084906143c5565b90915550506040516139c990849061473f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80613a595760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610a70565b5f613a68846001015160c01c90565b90505f613a76856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613aa5876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613b67885160f81c90565b858888866040518663ffffffff1660e01b8152600401613b8b95949392919061476b565b5f6040518083038186803b158015613ba1575f80fd5b505afa158015613bb3573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a954909190606490613be3908461459e565b613bed919061479c565b9050613bf981836143d8565b60aa5f828254613c0991906143c5565b90915550506001600160a01b0384165f90815260a5602052604081208054839290613c359084906143c5565b9091555050604051613c4890849061473f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015613d32575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613cda576040519150601f19603f3d011682016040523d82523d5f602084013e613cdf565b606091505b5050905080613d305760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610a70565b505b5050565b613d3e613400565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613d733390565b6040516001600160a01b03909116815260200160405180910390a1565b613d986140a2565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613d73565b5f8160f9811015613e1c5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610a70565b6040519150808483378082016040529250929050565b5f613e3e835160f01c90565b9050805f03613e79576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613e84603c8261459e565b613e8f9060026143c5565b821461134e576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f835f03613ed6575083613f8d565b609b546001600160a01b03165f5b85811015613f87576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015613f4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f6e9190614496565b8852506020909601956001948501949384019301613ee4565b50859150505b949350505050565b5f54610100900460ff166140115760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6065805460ff19169055565b5f54610100900460ff166140995760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f653361373f565b60655460ff16611f655760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a70565b5f60208284031215614104575f80fd5b5035919050565b80356001600160a01b0381168114614121575f80fd5b919050565b5f60208284031215614136575f80fd5b6137388261410b565b5f8083601f84011261414f575f80fd5b50813567ffffffffffffffff811115614166575f80fd5b60208301915083602082850101111561417d575f80fd5b9250929050565b5f805f60408486031215614196575f80fd5b833567ffffffffffffffff8111156141ac575f80fd5b6141b88682870161413f565b909790965060209590950135949350505050565b5f80602083850312156141dd575f80fd5b823567ffffffffffffffff8111156141f3575f80fd5b6141ff8582860161413f565b90969095509350505050565b5f806040838503121561421c575f80fd5b823567ffffffffffffffff80821115614233575f80fd5b9084019060c08287031215614246575f80fd5b9092506020840135908082111561425b575f80fd5b5083016060818603121561426d575f80fd5b809150509250929050565b5f805f805f8060c0878903121561428d575f80fd5b6142968761410b565b95506142a46020880161410b565b94506142b26040880161410b565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156142e6575f80fd5b843567ffffffffffffffff808211156142fd575f80fd5b6143098883890161413f565b90965094506020870135915080821115614321575f80fd5b5061432e8782880161413f565b95989497509550505050565b8015158114612b83575f80fd5b5f60208284031215614357575f80fd5b81356137388161433a565b5f8060408385031215614373575f80fd5b823567ffffffffffffffff8116811461438a575f80fd5b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561134e5761134e614398565b8181038181111561134e5761134e614398565b5f602082840312156143fb575f80fd5b81516137388161433a565b5f60208284031215614416575f80fd5b813560ff81168114613738575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614459575f80fd5b83018035915067ffffffffffffffff821115614473575f80fd5b60200191503681900382131561417d575f80fd5b818382375f9101908152919050565b5f602082840312156144a6575f80fd5b5051919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561453e5784516001600160a01b031683529383019391830191600101614519565b505087604086015284810360608601526145598187896144ad565b9a9950505050505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361459757614597614398565b5060010190565b808202811582820484141761134e5761134e614398565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126145f1575f80fd5b8135602067ffffffffffffffff8083111561460e5761460e6145b5565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614651576146516145b5565b6040529384526020818701810194908101925087851115614670575f80fd5b6020870191505b84821015614697576146888261410b565b83529183019190830190614677565b979650505050505050565b5f805f805f8060c087890312156146b7575f80fd5b86359550602087013567ffffffffffffffff808211156146d5575f80fd5b6146e18a838b016145e2565b96506040890135955060608901359150808211156146fd575f80fd5b6147098a838b016145e2565b94506080890135935060a0890135915080821115614725575f80fd5b5061473289828a016145e2565b9150509295509295509295565b5f82515f5b8181101561475e5760208186018101518583015201614744565b505f920191825250919050565b858152846020820152608060408201525f61478a6080830185876144ad565b90508260608301529695505050505050565b5f826147cf577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50049056fea164736f6c6343000818000a diff --git a/bindings/bindings/l1messagequeuewithgaspriceoracle.go b/bindings/bindings/l1messagequeuewithgaspriceoracle.go index 966fbf65e..34bda65f5 100644 --- a/bindings/bindings/l1messagequeuewithgaspriceoracle.go +++ b/bindings/bindings/l1messagequeuewithgaspriceoracle.go @@ -31,8 +31,8 @@ var ( // L1MessageQueueWithGasPriceOracleMetaData contains all meta data concerning the L1MessageQueueWithGasPriceOracle contract. var L1MessageQueueWithGasPriceOracleMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_enforcedTxGateway\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"skippedBitmap\",\"type\":\"uint256\"}],\"name\":\"DequeueTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"DropTransaction\",\"type\":\"event\"},{\"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\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"queueIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"QueueTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldGateway\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newGateway\",\"type\":\"address\"}],\"name\":\"UpdateEnforcedTxGateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldGasOracle\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newGasOracle\",\"type\":\"address\"}],\"name\":\"UpdateGasOracle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldL2BaseFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newL2BaseFee\",\"type\":\"uint256\"}],\"name\":\"UpdateL2BaseFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_oldMaxGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newMaxGasLimit\",\"type\":\"uint256\"}],\"name\":\"UpdateMaxGasLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldWhitelistChecker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newWhitelistChecker\",\"type\":\"address\"}],\"name\":\"UpdateWhitelistChecker\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ENFORCED_TX_GATEWAAY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROLLUP_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"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\":\"appendCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"appendEnforcedTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"calculateIntrinsicGasFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"computeTransactionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"dropCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"estimateCrossDomainMessageFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"}],\"name\":\"getCrossDomainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_whitelistChecker\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"}],\"name\":\"isMessageDropped\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"}],\"name\":\"isMessageSkipped\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextCrossDomainMessageIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingQueueIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_skippedBitmap\",\"type\":\"uint256\"}],\"name\":\"popCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newL2BaseFee\",\"type\":\"uint256\"}],\"name\":\"setL2BaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newMaxGasLimit\",\"type\":\"uint256\"}],\"name\":\"updateMaxGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newWhitelistChecker\",\"type\":\"address\"}],\"name\":\"updateWhitelistChecker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"whitelistChecker\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e060405234801562000010575f80fd5b5060405162001aad38038062001aad833981016040819052620000339162000185565b6001600160a01b03831615806200005157506001600160a01b038216155b806200006457506001600160a01b038116155b156200008357604051630ecc6fdf60e41b815260040160405180910390fd5b6200008d620000ab565b6001600160a01b0392831660805290821660a0521660c052620001cc565b5f54610100900460ff1615620001175760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161462000167575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b038116811462000180575f80fd5b919050565b5f805f6060848603121562000198575f80fd5b620001a38462000169565b9250620001b36020850162000169565b9150620001c36040850162000169565b90509250925092565b60805160a05160c05161189a620002135f395f818161036f0152610d5a01525f8181610269015261052401525f81816102e6015281816109e30152610c02015261189a5ff3fe608060405234801561000f575f80fd5b50600436106101a5575f3560e01c80639b159782116100e8578063d5ad4a9711610093578063e172d3a11161006e578063e172d3a1146103ca578063e3176bd5146103e4578063f2fde38b146103ed578063fd0ad31e14610400575f80fd5b8063d5ad4a9714610391578063d99bc80e146103a4578063da35a26f146103b7575f80fd5b8063bb7862ca116100c3578063bb7862ca14610337578063bdc6f0a014610357578063c27606771461036a575f80fd5b80639b15978214610308578063a85006ca1461031b578063ae453cd514610324575f80fd5b80635f9cd92e116101535780638770d7071161012e5780638770d707146102645780638da5cb5b146102b057806391652461146102ce578063927ede2d146102e1575f80fd5b80635f9cd92e14610236578063715018a6146102495780637d82191a14610251575f80fd5b806355f613ce1161018357806355f613ce146102055780635ad9945a1461021a5780635e45da231461022d575f80fd5b806329aa604b146101a95780633e4cbbe6146101cf5780633e6dada1146101e2575b5f80fd5b6101bc6101b73660046114fc565b610408565b6040519081526020015b60405180910390f35b6101bc6101dd366004611536565b610427565b6101f56101f03660046114fc565b6104db565b60405190151581526020016101c6565b61021861021336600461155e565b610521565b005b6101bc6102283660046115cc565b610715565b6101bc60685481565b610218610244366004611648565b610905565b61021861099a565b6101f561025f3660046114fc565b6109ad565b61028b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff1661028b565b6102186102dc3660046114fc565b6109e0565b61028b7f000000000000000000000000000000000000000000000000000000000000000081565b610218610316366004611661565b610bff565b6101bc60675481565b6101bc6103323660046114fc565b610ce1565b606b5461028b9073ffffffffffffffffffffffffffffffffffffffff1681565b6102186103653660046116b7565b610d57565b61028b7f000000000000000000000000000000000000000000000000000000000000000081565b61021861039f3660046114fc565b610e88565b6102186103b23660046114fc565b610ed6565b6102186103c536600461172a565b610f1c565b6101bc6103d8366004611754565b60100261520801919050565b6101bc60655481565b6102186103fb366004611648565b6110d1565b6066546101bc565b60668181548110610417575f80fd5b5f91825260209091200154905081565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610495573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b99190611793565b156104c557505f6104d5565b6065546104d290836117b9565b90505b92915050565b600881901c5f908152606a6020526040812054600160ff84161b16151580156104d55750600882901c5f90815260696020526040902054600160ff84161b1615156104d5565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146105ab5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008211156105fd5760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016105a2565b826067541461064e5760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016105a2565b600883901c5f818152606a6020526040902080546001851b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0193841660ff871681811b9092179092559092919061010081860111156106c557600182015f908152606a6020526040902061010082900385901c90555b50505081830160675560408051848152602081018490529081018290527fc77f792f838ae38399ac31acc3348389aeb110ce7bedf3cfdbdd5e6679267970906060015b60405180910390a1505050565b5f607e816107bf565b5f8161072c57506001919050565b5b81156107425760089190911c9060010161072d565b919050565b80608083106001811461077f5761075d8461071e565b60808101835360018301925084816020036008021b83528083019250506107a0565b848415166001811461079357848353610798565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b600560405101806107d260018c83610747565b90506107e060018983610747565b90506107ec89826107a8565b90506107fa60018b83610747565b905060018614600181146108625760388710600181146108475761081d8861071e565b8060b701845360018401935088816020036008021b8452808401935050878984379187019161085c565b87608001835360018301925087898437918701915b50610873565b6108705f89355f1a84610747565b91505b5061087e8c826107a8565b90508181035f8060388310600181146108b15761089a8461071e565b60f78101600882021b8517935060010191506108bc565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61090d61116e565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6109a261116e565b6109ab5f6111d5565b565b5f60675482106109be57505f919050565b600882901c5f908152606a6020526040902054600160ff84161b1615156104d5565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610a8b5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016105a2565b6067548110610adc5760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f742064726f702070656e64696e67206d657373616765000000000060448201526064016105a2565b600881901c5f908152606a6020526040902054600160ff83161b16610b435760405162461bcd60e51b815260206004820152601860248201527f64726f70206e6f6e2d736b6970706564206d657373616765000000000000000060448201526064016105a2565b600881901c5f90815260696020526040902054600160ff83161b1615610bab5760405162461bcd60e51b815260206004820152601760248201527f6d65737361676520616c72656164792064726f7070656400000000000000000060448201526064016105a2565b600881901c5f9081526069602052604090208054600160ff84161b1790556040518181527f43a375005206d20a83abc71722cba68c24434a8dc1f583775be7c3fde0396cbf9060200160405180910390a150565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610caa5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016105a2565b610cb583838361124b565b3373111100000000000000000000000000000000111101610cda81865f878787611347565b5050505050565b6066545f908210610d345760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016105a2565b60668281548110610d4757610d476117f5565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610e025760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016105a2565b73ffffffffffffffffffffffffffffffffffffffff86163b15610e675760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016105a2565b610e7283838361124b565b610e80868686868686611347565b505050505050565b610e9061116e565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c591015b60405180910390a15050565b610ede61116e565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610eca565b5f54610100900460ff1615808015610f3a57505f54600160ff909116105b80610f535750303b158015610f5357505f5460ff166001145b610fc55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105a2565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611021575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6110296113f8565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905580156110cc575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610708565b505050565b6110d961116e565b73ffffffffffffffffffffffffffffffffffffffff81166111625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105a2565b61116b816111d5565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109ab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105a2565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6068548311156112c35760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016105a2565b6010810261520801808410156113415760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016105a2565b50505050565b6066545f61135a8883888a898989610715565b606680546001810182555f919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540181905560405190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e906113e6908a9087908b908b908b90611822565b60405180910390a35050505050505050565b5f54610100900460ff166114745760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105a2565b6109ab5f54610100900460ff166114f35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105a2565b6109ab336111d5565b5f6020828403121561150c575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610742575f80fd5b5f8060408385031215611547575f80fd5b61155083611513565b946020939093013593505050565b5f805f60608486031215611570575f80fd5b505081359360208301359350604090920135919050565b5f8083601f840112611597575f80fd5b50813567ffffffffffffffff8111156115ae575f80fd5b6020830191508360208285010111156115c5575f80fd5b9250929050565b5f805f805f805f60c0888a0312156115e2575f80fd5b6115eb88611513565b9650602088013595506040880135945061160760608901611513565b93506080880135925060a088013567ffffffffffffffff811115611629575f80fd5b6116358a828b01611587565b989b979a50959850939692959293505050565b5f60208284031215611658575f80fd5b6104d282611513565b5f805f8060608587031215611674575f80fd5b61167d85611513565b935060208501359250604085013567ffffffffffffffff81111561169f575f80fd5b6116ab87828801611587565b95989497509550505050565b5f805f805f8060a087890312156116cc575f80fd5b6116d587611513565b95506116e360208801611513565b94506040870135935060608701359250608087013567ffffffffffffffff81111561170c575f80fd5b61171889828a01611587565b979a9699509497509295939492505050565b5f806040838503121561173b575f80fd5b8235915061174b60208401611513565b90509250929050565b5f8060208385031215611765575f80fd5b823567ffffffffffffffff81111561177b575f80fd5b61178785828601611587565b90969095509350505050565b5f602082840312156117a3575f80fd5b815180151581146117b2575f80fd5b9392505050565b80820281158282048414176104d5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_enforcedTxGateway\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"DequeueTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"DropTransaction\",\"type\":\"event\"},{\"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\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"queueIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"QueueTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldGateway\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newGateway\",\"type\":\"address\"}],\"name\":\"UpdateEnforcedTxGateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldGasOracle\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newGasOracle\",\"type\":\"address\"}],\"name\":\"UpdateGasOracle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldL2BaseFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newL2BaseFee\",\"type\":\"uint256\"}],\"name\":\"UpdateL2BaseFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_oldMaxGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newMaxGasLimit\",\"type\":\"uint256\"}],\"name\":\"UpdateMaxGasLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldWhitelistChecker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newWhitelistChecker\",\"type\":\"address\"}],\"name\":\"UpdateWhitelistChecker\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ENFORCED_TX_GATEWAAY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROLLUP_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"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\":\"appendCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"appendEnforcedTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"calculateIntrinsicGasFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"computeTransactionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"dropCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"estimateCrossDomainMessageFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"}],\"name\":\"getCrossDomainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_whitelistChecker\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"}],\"name\":\"isMessageDropped\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextCrossDomainMessageIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingQueueIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"popCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newL2BaseFee\",\"type\":\"uint256\"}],\"name\":\"setL2BaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newMaxGasLimit\",\"type\":\"uint256\"}],\"name\":\"updateMaxGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newWhitelistChecker\",\"type\":\"address\"}],\"name\":\"updateWhitelistChecker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"whitelistChecker\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60e060405234801562000010575f80fd5b506040516200194138038062001941833981016040819052620000339162000185565b6001600160a01b03831615806200005157506001600160a01b038216155b806200006457506001600160a01b038116155b156200008357604051630ecc6fdf60e41b815260040160405180910390fd5b6200008d620000ab565b6001600160a01b0392831660805290821660a0521660c052620001cc565b5f54610100900460ff1615620001175760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161462000167575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b038116811462000180575f80fd5b919050565b5f805f6060848603121562000198575f80fd5b620001a38462000169565b9250620001b36020850162000169565b9150620001c36040850162000169565b90509250925092565b60805160a05160c05161172e620002135f395f81816103510152610bfb01525f818161024b015261040c01525f81816102c8015281816108eb0152610aa3015261172e5ff3fe608060405234801561000f575f80fd5b506004361061019a575f3560e01c80639b159782116100e8578063d5ad4a9711610093578063e172d3a11161006e578063e172d3a1146103ac578063e3176bd5146103c6578063f2fde38b146103cf578063fd0ad31e146103e2575f80fd5b8063d5ad4a9714610373578063d99bc80e14610386578063da35a26f14610399575f80fd5b8063bb7862ca116100c3578063bb7862ca14610319578063bdc6f0a014610339578063c27606771461034c575f80fd5b80639b159782146102ea578063a85006ca146102fd578063ae453cd514610306575f80fd5b80635f9cd92e116101485780638da5cb5b116101235780638da5cb5b1461029257806391652461146102b0578063927ede2d146102c3575f80fd5b80635f9cd92e1461022b578063715018a61461023e5780638770d70714610246575f80fd5b80633e6dada1116101785780633e6dada1146101ec5780635ad9945a1461020f5780635e45da2314610222575f80fd5b806329aa604b1461019e5780633c7f5283146101c45780633e4cbbe6146101d9575b5f80fd5b6101b16101ac366004611399565b6103ea565b6040519081526020015b60405180910390f35b6101d76101d23660046113b0565b610409565b005b6101b16101e73660046113f3565b61057a565b6101ff6101fa366004611399565b61062e565b60405190151581526020016101bb565b6101b161021d366004611460565b610650565b6101b160685481565b6101d76102393660046114dc565b610840565b6101d76108d5565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bb565b60335473ffffffffffffffffffffffffffffffffffffffff1661026d565b6101d76102be366004611399565b6108e8565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6101d76102f83660046114f5565b610aa0565b6101b160675481565b6101b1610314366004611399565b610b82565b606b5461026d9073ffffffffffffffffffffffffffffffffffffffff1681565b6101d761034736600461154b565b610bf8565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6101d7610381366004611399565b610d29565b6101d7610394366004611399565b610d6f565b6101d76103a73660046115be565b610db5565b6101b16103ba3660046115e8565b60100261520801919050565b6101b160655481565b6101d76103dd3660046114dc565b610f6e565b6066546101b1565b606681815481106103f9575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104935760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008111156104e55760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d657373616765730000000000000000000000604482015260640161048a565b81606754146105365760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d61746368000000000000000000000000604482015260640161048a565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa1580156105e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060c9190611627565b1561061857505f610628565b606554610625908361164d565b90505b92915050565b600881901c5f90815260696020526040812054600160ff84161b161515610628565b5f607e816106fa565b5f8161066757506001919050565b5b811561067d5760089190911c90600101610668565b919050565b8060808310600181146106ba5761069884610659565b60808101835360018301925084816020036008021b83528083019250506106db565b84841516600181146106ce578483536106d3565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061070d60018c83610682565b905061071b60018983610682565b905061072789826106e3565b905061073560018b83610682565b9050600186146001811461079d5760388710600181146107825761075888610659565b8060b701845360018401935088816020036008021b84528084019350508789843791870191610797565b87608001835360018301925087898437918701915b506107ae565b6107ab5f89355f1a84610682565b91505b506107b98c826106e3565b90508181035f8060388310600181146107ec576107d584610659565b60f78101600882021b8517935060010191506107f7565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61084861100b565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108dd61100b565b6108e65f611072565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146109935760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e676572000000000000000000000000000000000000000000606482015260840161048a565b60675481106109e45760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f742064726f702070656e64696e67206d6573736167650000000000604482015260640161048a565b600881901c5f90815260696020526040902054600160ff83161b1615610a4c5760405162461bcd60e51b815260206004820152601760248201527f6d65737361676520616c72656164792064726f70706564000000000000000000604482015260640161048a565b600881901c5f9081526069602052604090208054600160ff84161b1790556040518181527f43a375005206d20a83abc71722cba68c24434a8dc1f583775be7c3fde0396cbf9060200160405180910390a150565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b4b5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e676572000000000000000000000000000000000000000000606482015260840161048a565b610b568383836110e8565b3373111100000000000000000000000000000000111101610b7b81865f8787876111e4565b5050505050565b6066545f908210610bd55760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e6765000000000000604482015260640161048a565b60668281548110610be857610be8611689565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610ca35760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f6174657761790000000000000000000000000000000000000000000000000000606482015260840161048a565b73ffffffffffffffffffffffffffffffffffffffff86163b15610d085760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f41000000000000000000000000000000000000000000000000604482015260640161048a565b610d138383836110e8565b610d218686868686866111e4565b505050505050565b610d3161100b565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c5910161056e565b610d7761100b565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead366329910161056e565b5f54610100900460ff1615808015610dd357505f54600160ff909116105b80610dec5750303b158015610dec57505f5460ff166001145b610e5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161048a565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610eba575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610ec2611295565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610f69575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610f7661100b565b73ffffffffffffffffffffffffffffffffffffffff8116610fff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161048a565b61100881611072565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048a565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6068548311156111605760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d6974000000000000000000000000000000000000000000000000000000606482015260840161048a565b6010810261520801808410156111de5760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e7369632067617300000000000000000000000000606482015260840161048a565b50505050565b6066545f6111f78883888a898989610650565b606680546001810182555f919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540181905560405190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611283908a9087908b908b908b906116b6565b60405180910390a35050505050505050565b5f54610100900460ff166113115760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161048a565b6108e65f54610100900460ff166113905760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161048a565b6108e633611072565b5f602082840312156113a9575f80fd5b5035919050565b5f80604083850312156113c1575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067d575f80fd5b5f8060408385031215611404575f80fd5b61140d836113d0565b946020939093013593505050565b5f8083601f84011261142b575f80fd5b50813567ffffffffffffffff811115611442575f80fd5b602083019150836020828501011115611459575f80fd5b9250929050565b5f805f805f805f60c0888a031215611476575f80fd5b61147f886113d0565b9650602088013595506040880135945061149b606089016113d0565b93506080880135925060a088013567ffffffffffffffff8111156114bd575f80fd5b6114c98a828b0161141b565b989b979a50959850939692959293505050565b5f602082840312156114ec575f80fd5b610625826113d0565b5f805f8060608587031215611508575f80fd5b611511856113d0565b935060208501359250604085013567ffffffffffffffff811115611533575f80fd5b61153f8782880161141b565b95989497509550505050565b5f805f805f8060a08789031215611560575f80fd5b611569876113d0565b9550611577602088016113d0565b94506040870135935060608701359250608087013567ffffffffffffffff8111156115a0575f80fd5b6115ac89828a0161141b565b979a9699509497509295939492505050565b5f80604083850312156115cf575f80fd5b823591506115df602084016113d0565b90509250929050565b5f80602083850312156115f9575f80fd5b823567ffffffffffffffff81111561160f575f80fd5b61161b8582860161141b565b90969095509350505050565b5f60208284031215611637575f80fd5b81518015158114611646575f80fd5b9392505050565b8082028115828204841417610628577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a", } // L1MessageQueueWithGasPriceOracleABI is the input ABI used to generate the binding from. @@ -450,37 +450,6 @@ func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleCallerS return _L1MessageQueueWithGasPriceOracle.Contract.IsMessageDropped(&_L1MessageQueueWithGasPriceOracle.CallOpts, _queueIndex) } -// IsMessageSkipped is a free data retrieval call binding the contract method 0x7d82191a. -// -// Solidity: function isMessageSkipped(uint256 _queueIndex) view returns(bool) -func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleCaller) IsMessageSkipped(opts *bind.CallOpts, _queueIndex *big.Int) (bool, error) { - var out []interface{} - err := _L1MessageQueueWithGasPriceOracle.contract.Call(opts, &out, "isMessageSkipped", _queueIndex) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsMessageSkipped is a free data retrieval call binding the contract method 0x7d82191a. -// -// Solidity: function isMessageSkipped(uint256 _queueIndex) view returns(bool) -func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleSession) IsMessageSkipped(_queueIndex *big.Int) (bool, error) { - return _L1MessageQueueWithGasPriceOracle.Contract.IsMessageSkipped(&_L1MessageQueueWithGasPriceOracle.CallOpts, _queueIndex) -} - -// IsMessageSkipped is a free data retrieval call binding the contract method 0x7d82191a. -// -// Solidity: function isMessageSkipped(uint256 _queueIndex) view returns(bool) -func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleCallerSession) IsMessageSkipped(_queueIndex *big.Int) (bool, error) { - return _L1MessageQueueWithGasPriceOracle.Contract.IsMessageSkipped(&_L1MessageQueueWithGasPriceOracle.CallOpts, _queueIndex) -} - // L2BaseFee is a free data retrieval call binding the contract method 0xe3176bd5. // // Solidity: function l2BaseFee() view returns(uint256) @@ -782,25 +751,25 @@ func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleTransac return _L1MessageQueueWithGasPriceOracle.Contract.Initialize(&_L1MessageQueueWithGasPriceOracle.TransactOpts, _maxGasLimit, _whitelistChecker) } -// PopCrossDomainMessage is a paid mutator transaction binding the contract method 0x55f613ce. +// PopCrossDomainMessage is a paid mutator transaction binding the contract method 0x3c7f5283. // -// Solidity: function popCrossDomainMessage(uint256 _startIndex, uint256 _count, uint256 _skippedBitmap) returns() -func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleTransactor) PopCrossDomainMessage(opts *bind.TransactOpts, _startIndex *big.Int, _count *big.Int, _skippedBitmap *big.Int) (*types.Transaction, error) { - return _L1MessageQueueWithGasPriceOracle.contract.Transact(opts, "popCrossDomainMessage", _startIndex, _count, _skippedBitmap) +// Solidity: function popCrossDomainMessage(uint256 _startIndex, uint256 _count) returns() +func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleTransactor) PopCrossDomainMessage(opts *bind.TransactOpts, _startIndex *big.Int, _count *big.Int) (*types.Transaction, error) { + return _L1MessageQueueWithGasPriceOracle.contract.Transact(opts, "popCrossDomainMessage", _startIndex, _count) } -// PopCrossDomainMessage is a paid mutator transaction binding the contract method 0x55f613ce. +// PopCrossDomainMessage is a paid mutator transaction binding the contract method 0x3c7f5283. // -// Solidity: function popCrossDomainMessage(uint256 _startIndex, uint256 _count, uint256 _skippedBitmap) returns() -func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleSession) PopCrossDomainMessage(_startIndex *big.Int, _count *big.Int, _skippedBitmap *big.Int) (*types.Transaction, error) { - return _L1MessageQueueWithGasPriceOracle.Contract.PopCrossDomainMessage(&_L1MessageQueueWithGasPriceOracle.TransactOpts, _startIndex, _count, _skippedBitmap) +// Solidity: function popCrossDomainMessage(uint256 _startIndex, uint256 _count) returns() +func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleSession) PopCrossDomainMessage(_startIndex *big.Int, _count *big.Int) (*types.Transaction, error) { + return _L1MessageQueueWithGasPriceOracle.Contract.PopCrossDomainMessage(&_L1MessageQueueWithGasPriceOracle.TransactOpts, _startIndex, _count) } -// PopCrossDomainMessage is a paid mutator transaction binding the contract method 0x55f613ce. +// PopCrossDomainMessage is a paid mutator transaction binding the contract method 0x3c7f5283. // -// Solidity: function popCrossDomainMessage(uint256 _startIndex, uint256 _count, uint256 _skippedBitmap) returns() -func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleTransactorSession) PopCrossDomainMessage(_startIndex *big.Int, _count *big.Int, _skippedBitmap *big.Int) (*types.Transaction, error) { - return _L1MessageQueueWithGasPriceOracle.Contract.PopCrossDomainMessage(&_L1MessageQueueWithGasPriceOracle.TransactOpts, _startIndex, _count, _skippedBitmap) +// Solidity: function popCrossDomainMessage(uint256 _startIndex, uint256 _count) returns() +func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleTransactorSession) PopCrossDomainMessage(_startIndex *big.Int, _count *big.Int) (*types.Transaction, error) { + return _L1MessageQueueWithGasPriceOracle.Contract.PopCrossDomainMessage(&_L1MessageQueueWithGasPriceOracle.TransactOpts, _startIndex, _count) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -977,15 +946,14 @@ func (it *L1MessageQueueWithGasPriceOracleDequeueTransactionIterator) Close() er // L1MessageQueueWithGasPriceOracleDequeueTransaction represents a DequeueTransaction event raised by the L1MessageQueueWithGasPriceOracle contract. type L1MessageQueueWithGasPriceOracleDequeueTransaction struct { - StartIndex *big.Int - Count *big.Int - SkippedBitmap *big.Int - Raw types.Log // Blockchain specific contextual infos + StartIndex *big.Int + Count *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterDequeueTransaction is a free log retrieval operation binding the contract event 0xc77f792f838ae38399ac31acc3348389aeb110ce7bedf3cfdbdd5e6679267970. +// FilterDequeueTransaction is a free log retrieval operation binding the contract event 0x3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f26. // -// Solidity: event DequeueTransaction(uint256 startIndex, uint256 count, uint256 skippedBitmap) +// Solidity: event DequeueTransaction(uint256 startIndex, uint256 count) func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleFilterer) FilterDequeueTransaction(opts *bind.FilterOpts) (*L1MessageQueueWithGasPriceOracleDequeueTransactionIterator, error) { logs, sub, err := _L1MessageQueueWithGasPriceOracle.contract.FilterLogs(opts, "DequeueTransaction") @@ -995,9 +963,9 @@ func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleFiltere return &L1MessageQueueWithGasPriceOracleDequeueTransactionIterator{contract: _L1MessageQueueWithGasPriceOracle.contract, event: "DequeueTransaction", logs: logs, sub: sub}, nil } -// WatchDequeueTransaction is a free log subscription operation binding the contract event 0xc77f792f838ae38399ac31acc3348389aeb110ce7bedf3cfdbdd5e6679267970. +// WatchDequeueTransaction is a free log subscription operation binding the contract event 0x3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f26. // -// Solidity: event DequeueTransaction(uint256 startIndex, uint256 count, uint256 skippedBitmap) +// Solidity: event DequeueTransaction(uint256 startIndex, uint256 count) func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleFilterer) WatchDequeueTransaction(opts *bind.WatchOpts, sink chan<- *L1MessageQueueWithGasPriceOracleDequeueTransaction) (event.Subscription, error) { logs, sub, err := _L1MessageQueueWithGasPriceOracle.contract.WatchLogs(opts, "DequeueTransaction") @@ -1032,9 +1000,9 @@ func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleFiltere }), nil } -// ParseDequeueTransaction is a log parse operation binding the contract event 0xc77f792f838ae38399ac31acc3348389aeb110ce7bedf3cfdbdd5e6679267970. +// ParseDequeueTransaction is a log parse operation binding the contract event 0x3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f26. // -// Solidity: event DequeueTransaction(uint256 startIndex, uint256 count, uint256 skippedBitmap) +// Solidity: event DequeueTransaction(uint256 startIndex, uint256 count) func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleFilterer) ParseDequeueTransaction(log types.Log) (*L1MessageQueueWithGasPriceOracleDequeueTransaction, error) { event := new(L1MessageQueueWithGasPriceOracleDequeueTransaction) if err := _L1MessageQueueWithGasPriceOracle.contract.UnpackLog(event, "DequeueTransaction", log); err != nil { diff --git a/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go b/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go index 761291539..a58058b80 100644 --- a/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go +++ b/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go @@ -9,11 +9,11 @@ import ( "morph-l2/bindings/solc" ) -const L1MessageQueueWithGasPriceOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1013_storage\"},{\"astId\":1003,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1012_storage\"},{\"astId\":1005,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"l2BaseFee\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_uint256\"},{\"astId\":1006,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"messageQueue\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_bytes32)dyn_storage\"},{\"astId\":1007,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"pendingQueueIndex\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_uint256\"},{\"astId\":1008,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"maxGasLimit\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"droppedMessageBitmap\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_struct(BitMap)1014_storage\"},{\"astId\":1010,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"skippedMessageBitmap\",\"offset\":0,\"slot\":\"106\",\"type\":\"t_mapping(t_uint256,t_uint256)\"},{\"astId\":1011,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"whitelistChecker\",\"offset\":0,\"slot\":\"107\",\"type\":\"t_address\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_bytes32)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"bytes32[]\",\"numberOfBytes\":\"32\"},\"t_array(t_uint256)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1013_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_uint256,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_uint256\"},\"t_struct(BitMap)1014_storage\":{\"encoding\":\"inplace\",\"label\":\"struct BitMapsUpgradeable.BitMap\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const L1MessageQueueWithGasPriceOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1013_storage\"},{\"astId\":1003,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1012_storage\"},{\"astId\":1005,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"l2BaseFee\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_uint256\"},{\"astId\":1006,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"messageQueue\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_bytes32)dyn_storage\"},{\"astId\":1007,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"pendingQueueIndex\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_uint256\"},{\"astId\":1008,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"maxGasLimit\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"droppedMessageBitmap\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_struct(BitMap)1014_storage\"},{\"astId\":1010,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__skippedMessageBitmap\",\"offset\":0,\"slot\":\"106\",\"type\":\"t_mapping(t_uint256,t_uint256)\"},{\"astId\":1011,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"whitelistChecker\",\"offset\":0,\"slot\":\"107\",\"type\":\"t_address\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_bytes32)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"bytes32[]\",\"numberOfBytes\":\"32\"},\"t_array(t_uint256)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1013_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_uint256,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_uint256\"},\"t_struct(BitMap)1014_storage\":{\"encoding\":\"inplace\",\"label\":\"struct BitMapsUpgradeable.BitMap\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var L1MessageQueueWithGasPriceOracleStorageLayout = new(solc.StorageLayout) -var L1MessageQueueWithGasPriceOracleDeployedBin = "0x608060405234801561000f575f80fd5b50600436106101a5575f3560e01c80639b159782116100e8578063d5ad4a9711610093578063e172d3a11161006e578063e172d3a1146103ca578063e3176bd5146103e4578063f2fde38b146103ed578063fd0ad31e14610400575f80fd5b8063d5ad4a9714610391578063d99bc80e146103a4578063da35a26f146103b7575f80fd5b8063bb7862ca116100c3578063bb7862ca14610337578063bdc6f0a014610357578063c27606771461036a575f80fd5b80639b15978214610308578063a85006ca1461031b578063ae453cd514610324575f80fd5b80635f9cd92e116101535780638770d7071161012e5780638770d707146102645780638da5cb5b146102b057806391652461146102ce578063927ede2d146102e1575f80fd5b80635f9cd92e14610236578063715018a6146102495780637d82191a14610251575f80fd5b806355f613ce1161018357806355f613ce146102055780635ad9945a1461021a5780635e45da231461022d575f80fd5b806329aa604b146101a95780633e4cbbe6146101cf5780633e6dada1146101e2575b5f80fd5b6101bc6101b73660046116d0565b610408565b6040519081526020015b60405180910390f35b6101bc6101dd36600461170a565b610427565b6101f56101f03660046116d0565b6104db565b60405190151581526020016101c6565b610218610213366004611732565b610521565b005b6101bc6102283660046117a0565b610763565b6101bc60685481565b61021861024436600461181c565b610953565b6102186109e8565b6101f561025f3660046116d0565b6109fb565b61028b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff1661028b565b6102186102dc3660046116d0565b610a2e565b61028b7f000000000000000000000000000000000000000000000000000000000000000081565b610218610316366004611835565b610cb5565b6101bc60675481565b6101bc6103323660046116d0565b610db1565b606b5461028b9073ffffffffffffffffffffffffffffffffffffffff1681565b61021861036536600461188b565b610e41565b61028b7f000000000000000000000000000000000000000000000000000000000000000081565b61021861039f3660046116d0565b610fa6565b6102186103b23660046116d0565b610ff4565b6102186103c53660046118fe565b61103a565b6101bc6103d8366004611928565b60100261520801919050565b6101bc60655481565b6102186103fb36600461181c565b611209565b6066546101bc565b60668181548110610417575f80fd5b5f91825260209091200154905081565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610495573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b99190611967565b156104c557505f6104d5565b6065546104d2908361198d565b90505b92915050565b600881901c5f908152606a6020526040812054600160ff84161b16151580156104d55750600882901c5f90815260696020526040902054600160ff84161b1615156104d5565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146105c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b610100821115610631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016105bc565b826067541461069c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016105bc565b600883901c5f818152606a6020526040902080546001851b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0193841660ff871681811b90921790925590929190610100818601111561071357600182015f908152606a6020526040902061010082900385901c90555b50505081830160675560408051848152602081018490529081018290527fc77f792f838ae38399ac31acc3348389aeb110ce7bedf3cfdbdd5e6679267970906060015b60405180910390a1505050565b5f607e8161080d565b5f8161077a57506001919050565b5b81156107905760089190911c9060010161077b565b919050565b8060808310600181146107cd576107ab8461076c565b60808101835360018301925084816020036008021b83528083019250506107ee565b84841516600181146107e1578483536107e6565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061082060018c83610795565b905061082e60018983610795565b905061083a89826107f6565b905061084860018b83610795565b905060018614600181146108b05760388710600181146108955761086b8861076c565b8060b701845360018401935088816020036008021b845280840193505087898437918701916108aa565b87608001835360018301925087898437918701915b506108c1565b6108be5f89355f1a84610795565b91505b506108cc8c826107f6565b90508181035f8060388310600181146108ff576108e88461076c565b60f78101600882021b85179350600101915061090a565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61095b6112c0565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6109f06112c0565b6109f95f611341565b565b5f6067548210610a0c57505f919050565b600882901c5f908152606a6020526040902054600160ff84161b1615156104d5565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610af3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016105bc565b6067548110610b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f63616e6e6f742064726f702070656e64696e67206d657373616765000000000060448201526064016105bc565b600881901c5f908152606a6020526040902054600160ff83161b16610bdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f64726f70206e6f6e2d736b6970706564206d657373616765000000000000000060448201526064016105bc565b600881901c5f90815260696020526040902054600160ff83161b1615610c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f6d65737361676520616c72656164792064726f7070656400000000000000000060448201526064016105bc565b600881901c5f9081526069602052604090208054600160ff84161b1790556040518181527f43a375005206d20a83abc71722cba68c24434a8dc1f583775be7c3fde0396cbf9060200160405180910390a150565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016105bc565b610d858383836113b7565b3373111100000000000000000000000000000000111101610daa81865f8787876114e7565b5050505050565b6066545f908210610e1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016105bc565b60668281548110610e3157610e316119c9565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016105bc565b73ffffffffffffffffffffffffffffffffffffffff86163b15610f85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016105bc565b610f908383836113b7565b610f9e8686868686866114e7565b505050505050565b610fae6112c0565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c591015b60405180910390a15050565b610ffc6112c0565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610fe8565b5f54610100900460ff161580801561105857505f54600160ff909116105b806110715750303b15801561107157505f5460ff166001145b6110fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105bc565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611159575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b611161611598565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015611204575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610756565b505050565b6112116112c0565b73ffffffffffffffffffffffffffffffffffffffff81166112b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105bc565b6112bd81611341565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105bc565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016105bc565b6010810261520801808410156114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016105bc565b50505050565b6066545f6114fa8883888a898989610763565b606680546001810182555f919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540181905560405190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611586908a9087908b908b908b906119f6565b60405180910390a35050505050505050565b5f54610100900460ff1661162e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105bc565b6109f95f54610100900460ff166116c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105bc565b6109f933611341565b5f602082840312156116e0575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610790575f80fd5b5f806040838503121561171b575f80fd5b611724836116e7565b946020939093013593505050565b5f805f60608486031215611744575f80fd5b505081359360208301359350604090920135919050565b5f8083601f84011261176b575f80fd5b50813567ffffffffffffffff811115611782575f80fd5b602083019150836020828501011115611799575f80fd5b9250929050565b5f805f805f805f60c0888a0312156117b6575f80fd5b6117bf886116e7565b965060208801359550604088013594506117db606089016116e7565b93506080880135925060a088013567ffffffffffffffff8111156117fd575f80fd5b6118098a828b0161175b565b989b979a50959850939692959293505050565b5f6020828403121561182c575f80fd5b6104d2826116e7565b5f805f8060608587031215611848575f80fd5b611851856116e7565b935060208501359250604085013567ffffffffffffffff811115611873575f80fd5b61187f8782880161175b565b95989497509550505050565b5f805f805f8060a087890312156118a0575f80fd5b6118a9876116e7565b95506118b7602088016116e7565b94506040870135935060608701359250608087013567ffffffffffffffff8111156118e0575f80fd5b6118ec89828a0161175b565b979a9699509497509295939492505050565b5f806040838503121561190f575f80fd5b8235915061191f602084016116e7565b90509250929050565b5f8060208385031215611939575f80fd5b823567ffffffffffffffff81111561194f575f80fd5b61195b8582860161175b565b90969095509350505050565b5f60208284031215611977575f80fd5b81518015158114611986575f80fd5b9392505050565b80820281158282048414176104d5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a" +var L1MessageQueueWithGasPriceOracleDeployedBin = "0x608060405234801561000f575f80fd5b506004361061019a575f3560e01c80639b159782116100e8578063d5ad4a9711610093578063e172d3a11161006e578063e172d3a1146103ac578063e3176bd5146103c6578063f2fde38b146103cf578063fd0ad31e146103e2575f80fd5b8063d5ad4a9714610373578063d99bc80e14610386578063da35a26f14610399575f80fd5b8063bb7862ca116100c3578063bb7862ca14610319578063bdc6f0a014610339578063c27606771461034c575f80fd5b80639b159782146102ea578063a85006ca146102fd578063ae453cd514610306575f80fd5b80635f9cd92e116101485780638da5cb5b116101235780638da5cb5b1461029257806391652461146102b0578063927ede2d146102c3575f80fd5b80635f9cd92e1461022b578063715018a61461023e5780638770d70714610246575f80fd5b80633e6dada1116101785780633e6dada1146101ec5780635ad9945a1461020f5780635e45da2314610222575f80fd5b806329aa604b1461019e5780633c7f5283146101c45780633e4cbbe6146101d9575b5f80fd5b6101b16101ac366004611553565b6103ea565b6040519081526020015b60405180910390f35b6101d76101d236600461156a565b610409565b005b6101b16101e73660046115ad565b6105c8565b6101ff6101fa366004611553565b61067c565b60405190151581526020016101bb565b6101b161021d36600461161a565b61069e565b6101b160685481565b6101d7610239366004611696565b61088e565b6101d7610923565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bb565b60335473ffffffffffffffffffffffffffffffffffffffff1661026d565b6101d76102be366004611553565b610936565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6101d76102f83660046116af565b610b3c565b6101b160675481565b6101b1610314366004611553565b610c38565b606b5461026d9073ffffffffffffffffffffffffffffffffffffffff1681565b6101d7610347366004611705565b610cc8565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6101d7610381366004611553565b610e2d565b6101d7610394366004611553565b610e73565b6101d76103a7366004611778565b610eb9565b6101b16103ba3660046117a2565b60100261520801919050565b6101b160655481565b6101d76103dd366004611696565b61108c565b6066546101b1565b606681815481106103f9575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b610100811115610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104a4565b8160675414610584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104a4565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610636573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065a91906117e1565b1561066657505f610676565b6065546106739083611807565b90505b92915050565b600881901c5f90815260696020526040812054600160ff84161b161515610676565b5f607e81610748565b5f816106b557506001919050565b5b81156106cb5760089190911c906001016106b6565b919050565b806080831060018114610708576106e6846106a7565b60808101835360018301925084816020036008021b8352808301925050610729565b848415166001811461071c57848353610721565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061075b60018c836106d0565b9050610769600189836106d0565b90506107758982610731565b905061078360018b836106d0565b905060018614600181146107eb5760388710600181146107d0576107a6886106a7565b8060b701845360018401935088816020036008021b845280840193505087898437918701916107e5565b87608001835360018301925087898437918701915b506107fc565b6107f95f89355f1a846106d0565b91505b506108078c82610731565b90508181035f80603883106001811461083a57610823846106a7565b60f78101600882021b851793506001019150610845565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b610896611143565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61092b611143565b6109345f6111c4565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146109fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104a4565b6067548110610a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f63616e6e6f742064726f702070656e64696e67206d657373616765000000000060448201526064016104a4565b600881901c5f90815260696020526040902054600160ff83161b1615610ae8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f6d65737361676520616c72656164792064726f7070656400000000000000000060448201526064016104a4565b600881901c5f9081526069602052604090208054600160ff84161b1790556040518181527f43a375005206d20a83abc71722cba68c24434a8dc1f583775be7c3fde0396cbf9060200160405180910390a150565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104a4565b610c0c83838361123a565b3373111100000000000000000000000000000000111101610c3181865f87878761136a565b5050505050565b6066545f908210610ca5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104a4565b60668281548110610cb857610cb8611843565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104a4565b73ffffffffffffffffffffffffffffffffffffffff86163b15610e0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104a4565b610e1783838361123a565b610e2586868686868661136a565b505050505050565b610e35611143565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c591016105bc565b610e7b611143565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead36632991016105bc565b5f54610100900460ff1615808015610ed757505f54600160ff909116105b80610ef05750303b158015610ef057505f5460ff166001145b610f7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a4565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610fd8575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610fe061141b565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015611087575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611094611143565b73ffffffffffffffffffffffffffffffffffffffff8116611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a4565b611140816111c4565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a4565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6068548311156112cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104a4565b601081026152080180841015611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104a4565b50505050565b6066545f61137d8883888a89898961069e565b606680546001810182555f919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540181905560405190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611409908a9087908b908b908b90611870565b60405180910390a35050505050505050565b5f54610100900460ff166114b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a4565b6109345f54610100900460ff1661154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a4565b610934336111c4565b5f60208284031215611563575f80fd5b5035919050565b5f806040838503121561157b575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146106cb575f80fd5b5f80604083850312156115be575f80fd5b6115c78361158a565b946020939093013593505050565b5f8083601f8401126115e5575f80fd5b50813567ffffffffffffffff8111156115fc575f80fd5b602083019150836020828501011115611613575f80fd5b9250929050565b5f805f805f805f60c0888a031215611630575f80fd5b6116398861158a565b965060208801359550604088013594506116556060890161158a565b93506080880135925060a088013567ffffffffffffffff811115611677575f80fd5b6116838a828b016115d5565b989b979a50959850939692959293505050565b5f602082840312156116a6575f80fd5b6106738261158a565b5f805f80606085870312156116c2575f80fd5b6116cb8561158a565b935060208501359250604085013567ffffffffffffffff8111156116ed575f80fd5b6116f9878288016115d5565b95989497509550505050565b5f805f805f8060a0878903121561171a575f80fd5b6117238761158a565b95506117316020880161158a565b94506040870135935060608701359250608087013567ffffffffffffffff81111561175a575f80fd5b61176689828a016115d5565b979a9699509497509295939492505050565b5f8060408385031215611789575f80fd5b823591506117996020840161158a565b90509250929050565b5f80602083850312156117b3575f80fd5b823567ffffffffffffffff8111156117c9575f80fd5b6117d5858286016115d5565b90969095509350505050565b5f602082840312156117f1575f80fd5b81518015158114611800575f80fd5b9392505050565b8082028115828204841417610676577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(L1MessageQueueWithGasPriceOracleStorageLayoutJSON), L1MessageQueueWithGasPriceOracleStorageLayout); err != nil { diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index 1f5814d07..755d06fc3 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -31,13 +31,12 @@ var ( // IRollupBatchDataInput is an auto generated low-level Go binding around an user-defined struct. type IRollupBatchDataInput struct { - Version uint8 - ParentBatchHeader []byte - BlockContexts []byte - SkippedL1MessageBitmap []byte - PrevStateRoot [32]byte - PostStateRoot [32]byte - WithdrawalRoot [32]byte + Version uint8 + ParentBatchHeader []byte + BlockContexts []byte + PrevStateRoot [32]byte + PostStateRoot [32]byte + WithdrawalRoot [32]byte } // IRollupBatchSignatureInput is an auto generated low-level Go binding around an user-defined struct. @@ -49,8 +48,8 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorIncorrectBatchLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorNoBlockInBatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blockContexts\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"skippedL1MessageBitmap\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b5060405162004b1e38038062004b1e83398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b6080516149c06200015e5f395f81816105d901526138fd01526149c05ff3fe608060405260043610610306575f3560e01c806388b1ea0911610191578063b3e0a509116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd146109b1578063f2fde38b146109d0578063fb1e8b04146109ef575f80fd5b8063ddd8a3dc1461095e578063de8b30351461097d578063dff7827e1461099c575f80fd5b8063ce5db8d6116100b7578063ce5db8d614610917578063d279c1911461092c578063d63b35491461094b575f80fd5b8063b3e0a509146108c6578063bedb86fb146108e5578063cd4edc6914610904575f80fd5b8063a479265d1161013c578063b31a77d311610117578063b31a77d314610873578063b348442514610888578063b35dac4e146108a7575f80fd5b8063a479265d14610814578063a4f209b014610829578063abc8d68d14610848575f80fd5b8063910129d41161016c578063910129d41461079657806397fc007c146107c7578063a415d8dc146107e6575f80fd5b806388b1ea09146106b05780638da5cb5b146106c95780638f1d3776146106e6575f80fd5b80632b7ac3f3116102515780635f77cf1d116101fc5780636c578c1d116101d75780636c578c1d1461065e578063715018a61461067d578063728cdbca14610691575f80fd5b80635f77cf1d146105c8578063612672901461061457806368589dfa14610633575f80fd5b806357e0af6c1161022c57806357e0af6c146105325780635c975abb146105515780635ef7a94a14610568575f80fd5b80632b7ac3f3146104c75780633b70c18a146104fe5780633e001b661461051d575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b3660046142d3565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b50610396610391366004614305565b610a04565b005b3480156103a3575f80fd5b506103966103b2366004614363565b610ad6565b3480156103c2575f80fd5b5061033f6103d13660046142d3565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b506103966104083660046143ab565b610e2f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c3660046142d3565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c3660046142d3565b611324565b34801561047c575f80fd5b5061036961048b3660046142d3565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b63660046142d3565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104e6906001600160a01b031681565b6040516001600160a01b03909116815260200161034b565b348015610509575f80fd5b50609b546104e6906001600160a01b031681565b348015610528575f80fd5b5061036960aa5481565b34801561053d575f80fd5b5061039661054c3660046142d3565b611352565b34801561055c575f80fd5b5060655460ff1661033f565b348015610573575f80fd5b506105a86105823660046142d3565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b3480156105d3575f80fd5b506105fb7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b34801561061f575f80fd5b5061039661062e3660046142d3565b6113fd565b34801561063e575f80fd5b5061036961064d3660046142d3565b60ab6020525f908152604090205481565b348015610669575f80fd5b50610396610678366004614305565b611612565b348015610688575f80fd5b506103966116cf565b34801561069c575f80fd5b506103966106ab3660046143ea565b6116e2565b3480156106bb575f80fd5b5060a65461033f9060ff1681565b3480156106d4575f80fd5b506033546001600160a01b03166104e6565b3480156106f1575f80fd5b506107526107003660046142d3565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b3480156107a1575f80fd5b5061033f6107b03660046142d3565b5f90815260a4602052604090206003015460ff1690565b3480156107d2575f80fd5b506103966107e1366004614305565b611a25565b3480156107f1575f80fd5b5061033f610800366004614305565b609f6020525f908152604090205460ff1681565b34801561081f575f80fd5b5061036960995481565b348015610834575f80fd5b506103966108433660046142d3565b611b08565b348015610853575f80fd5b50610369610862366004614305565b60a56020525f908152604090205481565b34801561087e575f80fd5b5061036960a85481565b348015610893575f80fd5b506103966108a2366004614445565b611bb8565b3480156108b2575f80fd5b506103966108c1366004614305565b611dfd565b3480156108d1575f80fd5b506103966108e03660046143ab565b611e56565b3480156108f0575f80fd5b506103966108ff3660046144b9565b6121a6565b6103966109123660046144d4565b612301565b348015610922575f80fd5b5061036960985481565b348015610937575f80fd5b50610396610946366004614305565b6128cd565b61039661095936600461450a565b61298c565b348015610969575f80fd5b506097546104e6906001600160a01b031681565b348015610988575f80fd5b5061033f6109973660046142d3565b6132b6565b3480156109a7575f80fd5b50610369609a5481565b3480156109bc575f80fd5b506103966109cb3660046142d3565b613300565b3480156109db575f80fd5b506103966109ea366004614305565b6133a3565b3480156109fa575f80fd5b5061036960a95481565b610a0c613430565b6001600160a01b0381165f908152609f602052604090205460ff1615610a795760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610ade613430565b5f8111610b2d5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610a70565b5f80610b39858561348a565b915091505f610b4c836001015160c01c90565b5f81815260a160205260409020549091508214610bab5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b5f60a181610bb987856145a4565b81526020019081526020015f205414610c395760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610a70565b609d548111610cb05760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b610cbb6001826145b7565b609e555b8315610e2757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d07816132b6565b15610d62575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d529084906145a4565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610ddf575060a85481145b15610de9575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cbf575b505050505050565b60a85415610e7f5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b610e876134a5565b5f80610e93848461348a565b915091505f610ea6836001015160c01c90565b5f81815260a160205260409020549091508214610f055760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b610f0e81611324565b610f5a5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b610f63816132b6565b15610fb05760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003015460ff16156110115760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610a70565b5f81815260a260205260409020600101544210156110715760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610a70565b605983015160a05f6110846001856145b7565b81526020019081526020015f2054146110df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f81815260a060205260409020541561113a5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610a70565b80609d546001011461118e5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b609d819055600160a35f6111a3866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556111f060f98401601185015160c01c600986015160c01c6134f8565b60a25f6111fe6001846145b7565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061123790846145b7565b81526020019081526020015f205f905560a45f60018361125791906145b7565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611300866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061134c57505f82815260a1602052604090205415155b92915050565b61135a613430565b5f8111801561136b57506099548114155b6113b75760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610a70565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561141d57505f5460ff8083169116105b61148f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556114ca5f5460ff1690565b60ff1660021461151c5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610a70565b8161158f5760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610a70565b609e545f90815260ab60205260409020546115b857609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016113f1565b61161a613430565b6001600160a01b0381165f908152609f602052604090205460ff166116815760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610a70565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610acb565b6116d7613430565b6116e05f6135c1565b565b5f54610100900460ff161580801561170057505f54600160ff909116105b806117195750303b15801561171957505f5460ff166001145b61178b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f805460ff1916600117905580156117c9575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b03861615806117e657506001600160a01b038516155b1561181d576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387166118735760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610a70565b61187b61362a565b6118836136ae565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611a1c575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611a2d613430565b6001600160a01b03811615801590611a535750609c546001600160a01b03828116911614155b611a9f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610a70565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611b10613430565b5f81118015611b20575060648111155b8015611b2e575060a9548114155b611b7a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610a70565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016113f1565b60a85415611c085760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b611c106134a5565b5f80611c1c868661348a565b915091505f611c2f836001015160c01c90565b5f81815260a160205260409020549091508214611c8e5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b611c97816132b6565b611ce35760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff191690556099546002909101544291611d3c916145a4565b11611db2575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152611dad91839190613732565b611a1c565b611dbd83868661388e565b611a1c81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613a41565b611e05613430565b60aa80545f909155611e178282613b0d565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016113f1565b611e5e613430565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415611ed55760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610a70565b5f80611ee1848461348a565b915091505f611ef4836001015160c01c90565b90508015611f445760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610a70565b5f611f50846079015190565b905080611f9f5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610a70565b600984015160c01c15611ff45760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610a70565b5f612000856019015190565b0361204d5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610a70565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612079856039015190565b146120c65760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610a70565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6121ae613430565b80156122cf576121bc613bb8565b60a65460ff161561228e5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916122109084906145a4565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6122d7613c12565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336122b1565b50565b335f908152609f602052604090205460ff1661235f5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610a70565b60a854156123af5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b6123b76134a5565b60a65460ff161561240a5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610a70565b8167ffffffffffffffff16609d54106124655760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a1602052604090205481146124cc5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b6124df8267ffffffffffffffff16611324565b61252b5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b0316156125a65760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a2602052604090206001015442106126365760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610a70565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612686573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126aa91906145ca565b3410156126f95760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161284b91815260200190565b60405180910390a35f609d54600161286391906145a4565b90505b609e5481116128bb578267ffffffffffffffff1681146128a9576099545f82815260a26020526040812060010180549091906128a39084906145a4565b90915550505b806128b3816145e1565b915050612866565b505060a6805460ff1916600117905550565b335f90815260a560205260408120549081900361292c5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610a70565b335f90815260a560205260408120556129458282613b0d565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161298091815260200190565b60405180910390a25050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156129f8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a1c9190614618565b612a685760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a70565b60a85415612ab85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b612ac06134a5565b612acd6020830183614633565b60ff1615612b1d5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610a70565b5f612b2b6040840184614653565b91505080612b7b5760405162461bcd60e51b815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610a70565b6080830135612bcc5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610a70565b60a0830135612c1d5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610a70565b5f80612c34612c2f6020870187614653565b61348a565b915091505f612c47836001015160c01c90565b90505f60a181612c588460016145a4565b81526020019081526020015f205414612cb35760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610a70565b609e548114612d045760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b5f81815260a160205260409020548214612d605760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610a70565b5f81815260ab6020526040902054608087013514612dc05760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f612dcf846011015160c01c90565b90505f8080612e2e612de460408c018c614653565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250889150612e29905060608f018f614653565b613c4b565b948501949384019392509050612e4760608b018b614653565b905061010060ff85010460200214612ea15760405162461bcd60e51b815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610a70565b600194909401935f804915612eb7575f49612ed9565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505f612ee960608d018d614653565b612ef5915060f96145a4565b90506040519850602081028901604052612f23898d5f016020810190612f1b9190614633565b60ff16613dcc565b60c087811b60018b015285811b60098b015286811b60118b015260198a0184905260808d013560598b015260a08d013560798b01528c013560998a0152612f9089612f7160208e018e614653565b604051612f7f9291906146b4565b604051809103902060b99190910152565b60d98901889052612fad89612fa860608f018f614653565b613dd3565b603989018290528089205f88815260a1602090815260408083209390935560ab905290812060a08e0135905560a65460ff16156130135760a7545f90815260a460205260409020600201546099544291613006916145a4565b61301091906145b7565b90505b6040518060800160405280428152602001826098544261303391906145a4565b61303d91906145a4565b815260200161308e8f80604001906130559190614653565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613ddf92505050565b81526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613102573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312691906145ca565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8990556097546001600160a01b031692506374fe27b791508c359061318e90613188908f018f614653565b5f613e36565b5f8e806040019061319f9190614653565b6040518663ffffffff1660e01b81526004016131bf95949392919061470a565b602060405180830381865afa1580156131da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131fe9190614618565b6132705760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061134c5750505f90815260a46020526040902060030154610100900460ff161590565b613308613430565b5f8111801561331957506098548114155b6133655760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610a70565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016113f1565b6133ab613430565b6001600160a01b0381166134275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a70565b6122fe816135c1565b6033546001600160a01b031633146116e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b5f805f6134978585613e8a565b812090969095509350505050565b60655460ff16156116e05760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a70565b805f0361350457505050565b8082035f805b83811015610e275761010081850381111561352457508084035b8651609b546040517f55f613ce0000000000000000000000000000000000000000000000000000000081526004810187905260248101849052604481018390526020909901989194506001600160a01b0316906355f613ce906064015f604051808303815f87803b158015613597575f80fd5b505af11580156135a9573d5f803e3d5ffd5b5050505061010084019350506101008101905061350a565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166136a65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6116e0613f61565b5f54610100900460ff1661372a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6116e0613fe9565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af11580156137b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137da91906145ca565b5f86815260a460205260409020600101549091506137f99082906145a4565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906138389084906145a4565b909155505060405161384b90849061477d565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b806138db5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610a70565b5f6138ea846001015160c01c90565b90505f6138f8856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613927876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a8486139e9885160f81c90565b858888866040518663ffffffff1660e01b8152600401613a0d9594939291906147a9565b5f6040518083038186803b158015613a23575f80fd5b505afa158015613a35573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a954909190606490613a6590846147da565b613a6f91906147f1565b9050613a7b81836145b7565b60aa5f828254613a8b91906145a4565b90915550506001600160a01b0384165f90815260a5602052604081208054839290613ab79084906145a4565b9091555050604051613aca90849061477d565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015613bb4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613b5c576040519150601f19603f3d011682016040523d82523d5f602084013e613b61565b606091505b5050905080613bb25760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610a70565b505b5050565b613bc06134a5565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613bf53390565b6040516001600160a01b03909116815260200160405180910390a1565b613c1a61406e565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613bf5565b60405185515f91829160208901919081908490613c699085906140c0565b90506002840193505f5b81811015613ced57603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f613cc3603c836147da565b613ccd90876145a4565b90505f613cde82603a015160f01c90565b97909701965050600101613c73565b506020850282016040525b8015613db8575f613d0d85603a015160f01c90565b9050613d1d83828d8d8d8d614155565b92505f613d2e866038015160f01c90565b905081811015613d805760405162461bcd60e51b815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610a70565b50998a01999890980197603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613cf8565b508190039020989197509095505050505050565b8082535050565b808260f9850137505050565b5f805f6020840190506002810191505f613dfa8286516140c0565b90505f5b613e096001836145b7565b811015613e1f57603c9390930192600101613dfe565b505f613e2c845160c01c90565b9695505050505050565b60605f80808080613e49888a018a614916565b9550955095509550955050818710613e67579450613e839350505050565b838710613e7b578295505050505050613e83565b509293505050505b9392505050565b5f8160f9811015613edd5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610a70565b6040519150808483378082016040525f613efb836009015160c01c90565b905061010060ff82010460200260f9018214613f595760405162461bcd60e51b815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610a70565b509250929050565b5f54610100900460ff16613fdd5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6065805460ff19169055565b5f54610100900460ff166140655760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6116e0336135c1565b60655460ff166116e05760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a70565b5f6140cc835160f01c90565b9050805f03614107576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614112603c826147da565b61411d9060026145a4565b821461134c576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f855f03614164575085613e2c565b609b546001600160a01b03165f80805b8981101561424a5760ff89169150600889901c811580614192575082155b156141a1578060200288013593505b600184841c165f03614239576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018a90525f906001600160a01b0387169063ae453cd590602401602060405180830381865afa15801561420b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061422f91906145ca565b8d52506020909b019a5b506001988901989788019701614174565b505060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88011681811c600116156142c55760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f7420736b6970206c617374204c31206d65737361676500000000006044820152606401610a70565b509798975050505050505050565b5f602082840312156142e3575f80fd5b5035919050565b80356001600160a01b0381168114614300575f80fd5b919050565b5f60208284031215614315575f80fd5b613e83826142ea565b5f8083601f84011261432e575f80fd5b50813567ffffffffffffffff811115614345575f80fd5b60208301915083602082850101111561435c575f80fd5b9250929050565b5f805f60408486031215614375575f80fd5b833567ffffffffffffffff81111561438b575f80fd5b6143978682870161431e565b909790965060209590950135949350505050565b5f80602083850312156143bc575f80fd5b823567ffffffffffffffff8111156143d2575f80fd5b6143de8582860161431e565b90969095509350505050565b5f805f805f8060c087890312156143ff575f80fd5b614408876142ea565b9550614416602088016142ea565b9450614424604088016142ea565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614458575f80fd5b843567ffffffffffffffff8082111561446f575f80fd5b61447b8883890161431e565b90965094506020870135915080821115614493575f80fd5b506144a08782880161431e565b95989497509550505050565b80151581146122fe575f80fd5b5f602082840312156144c9575f80fd5b8135613e83816144ac565b5f80604083850312156144e5575f80fd5b823567ffffffffffffffff811681146144fc575f80fd5b946020939093013593505050565b5f806040838503121561451b575f80fd5b823567ffffffffffffffff80821115614532575f80fd5b9084019060e08287031215614545575f80fd5b9092506020840135908082111561455a575f80fd5b5083016060818603121561456c575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561134c5761134c614577565b8181038181111561134c5761134c614577565b5f602082840312156145da575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361461157614611614577565b5060010190565b5f60208284031215614628575f80fd5b8151613e83816144ac565b5f60208284031215614643575f80fd5b813560ff81168114613e83575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614686575f80fd5b83018035915067ffffffffffffffff8211156146a0575f80fd5b60200191503681900382131561435c575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156147545784516001600160a01b03168352938301939183019160010161472f565b5050876040860152848103606086015261476f8187896146c3565b9a9950505050505050505050565b5f82515f5b8181101561479c5760208186018101518583015201614782565b505f920191825250919050565b858152846020820152608060408201525f6147c86080830185876146c3565b90508260608301529695505050505050565b808202811582820484141761134c5761134c614577565b5f82614824577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614865575f80fd5b8135602067ffffffffffffffff8083111561488257614882614829565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156148c5576148c5614829565b60405293845260208187018101949081019250878511156148e4575f80fd5b6020870191505b8482101561490b576148fc826142ea565b835291830191908301906148eb565b979650505050505050565b5f805f805f8060c0878903121561492b575f80fd5b86359550602087013567ffffffffffffffff80821115614949575f80fd5b6149558a838b01614856565b9650604089013595506060890135915080821115614971575f80fd5b61497d8a838b01614856565b94506080890135935060a0890135915080821115614999575f80fd5b506149a689828a01614856565b915050929550929550929556fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorIncorrectBatchLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorNoBlockInBatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blockContexts\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a060405234801562000010575f80fd5b506040516200493f3803806200493f83398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b6080516147e16200015e5f395f81816105ec0152613a7b01526147e15ff3fe608060405260043610610306575f3560e01c8063728cdbca11610191578063b35dac4e116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd146109b1578063f2fde38b146109d0578063fb1e8b04146109ef575f80fd5b8063ddd8a3dc1461095e578063de8b30351461097d578063dff7827e1461099c575f80fd5b8063cd4edc69116100b7578063cd4edc6914610917578063ce5db8d61461092a578063d279c1911461093f575f80fd5b8063b35dac4e146108ba578063b3e0a509146108d9578063bedb86fb146108f8575f80fd5b8063a415d8dc1161013c578063abc8d68d11610117578063abc8d68d1461085b578063b31a77d314610886578063b34844251461089b575f80fd5b8063a415d8dc146107f9578063a479265d14610827578063a4f209b01461083c575f80fd5b80638f1d37761161016c5780638f1d3776146106f9578063910129d4146107a957806397fc007c146107da575f80fd5b8063728cdbca146106a457806388b1ea09146106c35780638da5cb5b146106dc575f80fd5b80632b7ac3f3116102515780635ef7a94a116101fc57806368589dfa116101d757806368589dfa146106465780636c578c1d14610671578063715018a614610690575f80fd5b80635ef7a94a1461057b5780635f77cf1d146105db5780636126729014610627575f80fd5b80634a8d544f1161022c5780634a8d544f1461053257806357e0af6c146105455780635c975abb14610564575f80fd5b80632b7ac3f3146104c75780633b70c18a146104fe5780633e001b661461051d575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b3660046140f4565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b50610396610391366004614126565b610a04565b005b3480156103a3575f80fd5b506103966103b2366004614184565b610ad6565b3480156103c2575f80fd5b5061033f6103d13660046140f4565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b506103966104083660046141cc565b610e2f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c3660046140f4565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c3660046140f4565b611326565b34801561047c575f80fd5b5061036961048b3660046140f4565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b63660046140f4565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104e6906001600160a01b031681565b6040516001600160a01b03909116815260200161034b565b348015610509575f80fd5b50609b546104e6906001600160a01b031681565b348015610528575f80fd5b5061036960aa5481565b61039661054036600461420b565b611354565b348015610550575f80fd5b5061039661055f3660046140f4565b611bd7565b34801561056f575f80fd5b5060655460ff1661033f565b348015610586575f80fd5b506105bb6105953660046140f4565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b3480156105e6575f80fd5b5061060e7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b348015610632575f80fd5b506103966106413660046140f4565b611c82565b348015610651575f80fd5b506103696106603660046140f4565b60ab6020525f908152604090205481565b34801561067c575f80fd5b5061039661068b366004614126565b611e97565b34801561069b575f80fd5b50610396611f54565b3480156106af575f80fd5b506103966106be366004614278565b611f67565b3480156106ce575f80fd5b5060a65461033f9060ff1681565b3480156106e7575f80fd5b506033546001600160a01b03166104e6565b348015610704575f80fd5b506107656107133660046140f4565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b3480156107b4575f80fd5b5061033f6107c33660046140f4565b5f90815260a4602052604090206003015460ff1690565b3480156107e5575f80fd5b506103966107f4366004614126565b6122aa565b348015610804575f80fd5b5061033f610813366004614126565b609f6020525f908152604090205460ff1681565b348015610832575f80fd5b5061036960995481565b348015610847575f80fd5b506103966108563660046140f4565b61238d565b348015610866575f80fd5b50610369610875366004614126565b60a56020525f908152604090205481565b348015610891575f80fd5b5061036960a85481565b3480156108a6575f80fd5b506103966108b53660046142d3565b61243d565b3480156108c5575f80fd5b506103966108d4366004614126565b612682565b3480156108e4575f80fd5b506103966108f33660046141cc565b6126db565b348015610903575f80fd5b50610396610912366004614347565b612a2b565b610396610925366004614362565b612b86565b348015610935575f80fd5b5061036960985481565b34801561094a575f80fd5b50610396610959366004614126565b613152565b348015610969575f80fd5b506097546104e6906001600160a01b031681565b348015610988575f80fd5b5061033f6109973660046140f4565b613211565b3480156109a7575f80fd5b50610369609a5481565b3480156109bc575f80fd5b506103966109cb3660046140f4565b61325b565b3480156109db575f80fd5b506103966109ea366004614126565b6132fe565b3480156109fa575f80fd5b5061036960a95481565b610a0c61338b565b6001600160a01b0381165f908152609f602052604090205460ff1615610a795760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610ade61338b565b5f8111610b2d5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610a70565b5f80610b3985856133e5565b915091505f610b4c836001015160c01c90565b5f81815260a160205260409020549091508214610bab5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b5f60a181610bb987856143c5565b81526020019081526020015f205414610c395760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610a70565b609d548111610cb05760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b610cbb6001826143d8565b609e555b8315610e2757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d0781613211565b15610d62575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d529084906143c5565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610ddf575060a85481145b15610de9575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cbf575b505050505050565b60a85415610e7f5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b610e87613400565b5f80610e9384846133e5565b915091505f610ea6836001015160c01c90565b5f81815260a160205260409020549091508214610f055760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b610f0e81611326565b610f5a5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b610f6381613211565b15610fb05760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003015460ff16156110115760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610a70565b5f81815260a260205260409020600101544210156110715760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610a70565b605983015160a05f6110846001856143d8565b81526020019081526020015f2054146110df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f81815260a060205260409020541561113a5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610a70565b80609d546001011461118e5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b609d819055600160a35f6111a3866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556111f26111e5846011015160c01c90565b600985015160c01c613453565b60a25f6112006001846143d8565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061123990846143d8565b81526020019081526020015f205f905560a45f60018361125991906143d8565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611302866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061134e57505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156113c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e491906143eb565b6114305760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a70565b60a854156114805760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b611488613400565b6114956020830183614406565b60ff16156114e55760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610a70565b5f6114f36040840184614426565b915050806115435760405162461bcd60e51b815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610a70565b60608301356115945760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610a70565b60808301356115e55760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610a70565b5f806115fc6115f76020870187614426565b6133e5565b915091505f61160f836001015160c01c90565b90505f60a1816116208460016143c5565b81526020019081526020015f20541461167b5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610a70565b609e5481146116cc5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b5f81815260a1602052604090205482146117285760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610a70565b5f81815260ab60205260409020546060870135146117885760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f611797846011015160c01c90565b90505f80806117e96117ac60408c018c614426565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508792508891506135109050565b600196909601959485019493840193925090505f80491561180b575f4961182d565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b60408051611f2081019091529850905060f96118588961185060208f018f614406565b60ff1661368d565b60c087811b60018b015285811b60098b015286901b60118a01526019890183905260608c013560598a015260808c013560798a015260a08c013560998a01526118c7896118a860208e018e614426565b6040516118b6929190614487565b604051809103902060b99190910152565b60d98901889052603989018290528089205f88815260a1602090815260408083209390935560ab905290812060808e0135905560a65460ff16156119345760a7545f90815260a460205260409020600201546099544291611927916143c5565b61193191906143d8565b90505b6040518060800160405280428152602001826098544261195491906143c5565b61195e91906143c5565b81526020016119af8f80604001906119769190614426565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061369492505050565b81526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a479190614496565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8990556097546001600160a01b031692506374fe27b791508c3590611aaf90611aa9908f018f614426565b5f6136eb565b5f8e8060400190611ac09190614426565b6040518663ffffffff1660e01b8152600401611ae09594939291906144f4565b602060405180830381865afa158015611afb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1f91906143eb565b611b915760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b611bdf61338b565b5f81118015611bf057506099548114155b611c3c5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610a70565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611ca257505f5460ff8083169116105b611d145760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d4f5f5460ff1690565b60ff16600214611da15760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610a70565b81611e145760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610a70565b609e545f90815260ab6020526040902054611e3d57609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c76565b611e9f61338b565b6001600160a01b0381165f908152609f602052604090205460ff16611f065760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610a70565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610acb565b611f5c61338b565b611f655f61373f565b565b5f54610100900460ff1615808015611f8557505f54600160ff909116105b80611f9e5750303b158015611f9e57505f5460ff166001145b6120105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f805460ff19166001179055801561204e575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b038616158061206b57506001600160a01b038516155b156120a2576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387166120f85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610a70565b6121006137a8565b61210861382c565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156122a1575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6122b261338b565b6001600160a01b038116158015906122d85750609c546001600160a01b03828116911614155b6123245760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610a70565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61239561338b565b5f811180156123a5575060648111155b80156123b3575060a9548114155b6123ff5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610a70565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c76565b60a8541561248d5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b612495613400565b5f806124a186866133e5565b915091505f6124b4836001015160c01c90565b5f81815260a1602052604090205490915082146125135760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b61251c81613211565b6125685760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff1916905560995460029091015442916125c1916143c5565b11612637575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612632918391906138b0565b6122a1565b612642838686613a0c565b6122a181336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613bbf565b61268a61338b565b60aa80545f90915561269c8282613c8b565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c76565b6126e361338b565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561275a5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610a70565b5f8061276684846133e5565b915091505f612779836001015160c01c90565b905080156127c95760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610a70565b5f6127d5846079015190565b9050806128245760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610a70565b600984015160c01c156128795760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610a70565b5f612885856019015190565b036128d25760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610a70565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146128fe856039015190565b1461294b5760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610a70565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612a3361338b565b8015612b5457612a41613d36565b60a65460ff1615612b135760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612a959084906143c5565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612b5c613d90565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612b36565b50565b335f908152609f602052604090205460ff16612be45760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610a70565b60a85415612c345760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b612c3c613400565b60a65460ff1615612c8f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610a70565b8167ffffffffffffffff16609d5410612cea5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a160205260409020548114612d515760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b612d648267ffffffffffffffff16611326565b612db05760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612e2b5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a260205260409020600101544210612ebb5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610a70565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2f9190614496565b341015612f7e5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516130d091815260200190565b60405180910390a35f609d5460016130e891906143c5565b90505b609e548111613140578267ffffffffffffffff16811461312e576099545f82815260a26020526040812060010180549091906131289084906143c5565b90915550505b8061313881614567565b9150506130eb565b505060a6805460ff1916600117905550565b335f90815260a56020526040812054908190036131b15760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610a70565b335f90815260a560205260408120556131ca8282613c8b565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161320591815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061134e5750505f90815260a46020526040902060030154610100900460ff161590565b61326361338b565b5f8111801561327457506098548114155b6132c05760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610a70565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c76565b61330661338b565b6001600160a01b0381166133825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a70565b612b838161373f565b6033546001600160a01b03163314611f655760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b5f805f6133f28585613dc9565b812090969095509350505050565b60655460ff1615611f655760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a70565b805f0361345e575050565b8082035f5b8281101561350a5761010081840381111561347d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156134e0575f80fd5b505af11580156134f2573d5f803e3d5ffd5b50505050610100830192505061010081019050613463565b50505050565b60405183515f9182916020870191908190849061352e908590613e32565b90506002840193505f5b818110156135b257603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f613588603c8361459e565b61359290876143c5565b90505f6135a382603a015160f01c90565b97909701965050600101613538565b506020850282016040525b801561367b575f6135d285603a015160f01c90565b90506135e083828b8b613ec7565b92505f6135f1866038015160f01c90565b9050818110156136435760405162461bcd60e51b815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610a70565b50978801979690960195603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016135bd565b50819003902096919550909350505050565b8082535050565b5f805f6020840190506002810191505f6136af828651613e32565b90505f5b6136be6001836143d8565b8110156136d457603c93909301926001016136b3565b505f6136e1845160c01c90565b9695505050505050565b60605f808080806136fe888a018a6146a2565b955095509550955095505081871061371c5794506137389350505050565b838710613730578295505050505050613738565b509293505050505b9392505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166138245760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f65613f95565b5f54610100900460ff166138a85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f6561401d565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613934573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139589190614496565b5f86815260a460205260409020600101549091506139779082906143c5565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906139b69084906143c5565b90915550506040516139c990849061473f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80613a595760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610a70565b5f613a68846001015160c01c90565b90505f613a76856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613aa5876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613b67885160f81c90565b858888866040518663ffffffff1660e01b8152600401613b8b95949392919061476b565b5f6040518083038186803b158015613ba1575f80fd5b505afa158015613bb3573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a954909190606490613be3908461459e565b613bed919061479c565b9050613bf981836143d8565b60aa5f828254613c0991906143c5565b90915550506001600160a01b0384165f90815260a5602052604081208054839290613c359084906143c5565b9091555050604051613c4890849061473f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015613d32575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613cda576040519150601f19603f3d011682016040523d82523d5f602084013e613cdf565b606091505b5050905080613d305760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610a70565b505b5050565b613d3e613400565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613d733390565b6040516001600160a01b03909116815260200160405180910390a1565b613d986140a2565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613d73565b5f8160f9811015613e1c5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610a70565b6040519150808483378082016040529250929050565b5f613e3e835160f01c90565b9050805f03613e79576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613e84603c8261459e565b613e8f9060026143c5565b821461134e576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f835f03613ed6575083613f8d565b609b546001600160a01b03165f5b85811015613f87576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015613f4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f6e9190614496565b8852506020909601956001948501949384019301613ee4565b50859150505b949350505050565b5f54610100900460ff166140115760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6065805460ff19169055565b5f54610100900460ff166140995760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f653361373f565b60655460ff16611f655760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a70565b5f60208284031215614104575f80fd5b5035919050565b80356001600160a01b0381168114614121575f80fd5b919050565b5f60208284031215614136575f80fd5b6137388261410b565b5f8083601f84011261414f575f80fd5b50813567ffffffffffffffff811115614166575f80fd5b60208301915083602082850101111561417d575f80fd5b9250929050565b5f805f60408486031215614196575f80fd5b833567ffffffffffffffff8111156141ac575f80fd5b6141b88682870161413f565b909790965060209590950135949350505050565b5f80602083850312156141dd575f80fd5b823567ffffffffffffffff8111156141f3575f80fd5b6141ff8582860161413f565b90969095509350505050565b5f806040838503121561421c575f80fd5b823567ffffffffffffffff80821115614233575f80fd5b9084019060c08287031215614246575f80fd5b9092506020840135908082111561425b575f80fd5b5083016060818603121561426d575f80fd5b809150509250929050565b5f805f805f8060c0878903121561428d575f80fd5b6142968761410b565b95506142a46020880161410b565b94506142b26040880161410b565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156142e6575f80fd5b843567ffffffffffffffff808211156142fd575f80fd5b6143098883890161413f565b90965094506020870135915080821115614321575f80fd5b5061432e8782880161413f565b95989497509550505050565b8015158114612b83575f80fd5b5f60208284031215614357575f80fd5b81356137388161433a565b5f8060408385031215614373575f80fd5b823567ffffffffffffffff8116811461438a575f80fd5b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561134e5761134e614398565b8181038181111561134e5761134e614398565b5f602082840312156143fb575f80fd5b81516137388161433a565b5f60208284031215614416575f80fd5b813560ff81168114613738575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614459575f80fd5b83018035915067ffffffffffffffff821115614473575f80fd5b60200191503681900382131561417d575f80fd5b818382375f9101908152919050565b5f602082840312156144a6575f80fd5b5051919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561453e5784516001600160a01b031683529383019391830191600101614519565b505087604086015284810360608601526145598187896144ad565b9a9950505050505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361459757614597614398565b5060010190565b808202811582820484141761134e5761134e614398565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126145f1575f80fd5b8135602067ffffffffffffffff8083111561460e5761460e6145b5565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614651576146516145b5565b6040529384526020818701810194908101925087851115614670575f80fd5b6020870191505b84821015614697576146888261410b565b83529183019190830190614677565b979650505050505050565b5f805f805f8060c087890312156146b7575f80fd5b86359550602087013567ffffffffffffffff808211156146d5575f80fd5b6146e18a838b016145e2565b96506040890135955060608901359150808211156146fd575f80fd5b6147098a838b016145e2565b94506080890135935060a0890135915080821115614725575f80fd5b5061473289828a016145e2565b9150509295509295509295565b5f82515f5b8181101561475e5760208186018101518583015201614744565b505f920191825250919050565b858152846020820152608060408201525f61478a6080830185876144ad565b90508260608301529695505050505050565b5f826147cf577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50049056fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. @@ -1261,23 +1260,23 @@ func (_Rollup *RollupTransactorSession) ClaimReward(receiver common.Address) (*t return _Rollup.Contract.ClaimReward(&_Rollup.TransactOpts, receiver) } -// CommitBatch is a paid mutator transaction binding the contract method 0xd63b3549. +// CommitBatch is a paid mutator transaction binding the contract method 0x4a8d544f. // -// Solidity: function commitBatch((uint8,bytes,bytes,bytes,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput) payable returns() +// Solidity: function commitBatch((uint8,bytes,bytes,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput) payable returns() func (_Rollup *RollupTransactor) CommitBatch(opts *bind.TransactOpts, batchDataInput IRollupBatchDataInput, batchSignatureInput IRollupBatchSignatureInput) (*types.Transaction, error) { return _Rollup.contract.Transact(opts, "commitBatch", batchDataInput, batchSignatureInput) } -// CommitBatch is a paid mutator transaction binding the contract method 0xd63b3549. +// CommitBatch is a paid mutator transaction binding the contract method 0x4a8d544f. // -// Solidity: function commitBatch((uint8,bytes,bytes,bytes,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput) payable returns() +// Solidity: function commitBatch((uint8,bytes,bytes,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput) payable returns() func (_Rollup *RollupSession) CommitBatch(batchDataInput IRollupBatchDataInput, batchSignatureInput IRollupBatchSignatureInput) (*types.Transaction, error) { return _Rollup.Contract.CommitBatch(&_Rollup.TransactOpts, batchDataInput, batchSignatureInput) } -// CommitBatch is a paid mutator transaction binding the contract method 0xd63b3549. +// CommitBatch is a paid mutator transaction binding the contract method 0x4a8d544f. // -// Solidity: function commitBatch((uint8,bytes,bytes,bytes,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput) payable returns() +// Solidity: function commitBatch((uint8,bytes,bytes,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput) payable returns() func (_Rollup *RollupTransactorSession) CommitBatch(batchDataInput IRollupBatchDataInput, batchSignatureInput IRollupBatchSignatureInput) (*types.Transaction, error) { return _Rollup.Contract.CommitBatch(&_Rollup.TransactOpts, batchDataInput, batchSignatureInput) } diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index 1003e5872..3581703c1 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -13,7 +13,7 @@ const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"co var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x608060405260043610610306575f3560e01c806388b1ea0911610191578063b3e0a509116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd14610a0c578063f2fde38b14610a2b578063fb1e8b0414610a4a575f80fd5b8063ddd8a3dc146109ac578063de8b3035146109d8578063dff7827e146109f7575f80fd5b8063ce5db8d6116100b7578063ce5db8d614610965578063d279c1911461097a578063d63b354914610999575f80fd5b8063b3e0a50914610914578063bedb86fb14610933578063cd4edc6914610952575f80fd5b8063a479265d1161013c578063b31a77d311610117578063b31a77d3146108c1578063b3484425146108d6578063b35dac4e146108f5575f80fd5b8063a479265d14610862578063a4f209b014610877578063abc8d68d14610896575f80fd5b8063910129d41161016c578063910129d4146107e457806397fc007c14610815578063a415d8dc14610834575f80fd5b806388b1ea09146106d75780638da5cb5b146106f05780638f1d37761461071a575f80fd5b80632b7ac3f3116102515780635f77cf1d116101fc5780636c578c1d116101d75780636c578c1d14610685578063715018a6146106a4578063728cdbca146106b8575f80fd5b80635f77cf1d146105ef578063612672901461063b57806368589dfa1461065a575f80fd5b806357e0af6c1161022c57806357e0af6c146105595780635c975abb146105785780635ef7a94a1461058f575f80fd5b80632b7ac3f3146104c75780633b70c18a146105185780633e001b6614610544575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b366004614dad565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b50610396610391366004614dec565b610a5f565b005b3480156103a3575f80fd5b506103966103b2366004614e4a565b610b83565b3480156103c2575f80fd5b5061033f6103d1366004614dad565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b50610396610408366004614e92565b610f6f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c366004614dad565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c366004614dad565b61156c565b34801561047c575f80fd5b5061036961048b366004614dad565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b6366004614dad565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104f39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161034b565b348015610523575f80fd5b50609b546104f39073ffffffffffffffffffffffffffffffffffffffff1681565b34801561054f575f80fd5b5061036960aa5481565b348015610564575f80fd5b50610396610573366004614dad565b61159a565b348015610583575f80fd5b5060655460ff1661033f565b34801561059a575f80fd5b506105cf6105a9366004614dad565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b3480156105fa575f80fd5b506106227f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b348015610646575f80fd5b50610396610655366004614dad565b61165f565b348015610665575f80fd5b50610369610674366004614dad565b60ab6020525f908152604090205481565b348015610690575f80fd5b5061039661069f366004614dec565b6118c2565b3480156106af575f80fd5b506103966119d1565b3480156106c3575f80fd5b506103966106d2366004614ed1565b6119e4565b3480156106e2575f80fd5b5060a65461033f9060ff1681565b3480156106fb575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166104f3565b348015610725575f80fd5b50610793610734366004614dad565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b3480156107ef575f80fd5b5061033f6107fe366004614dad565b5f90815260a4602052604090206003015460ff1690565b348015610820575f80fd5b5061039661082f366004614dec565b611dad565b34801561083f575f80fd5b5061033f61084e366004614dec565b609f6020525f908152604090205460ff1681565b34801561086d575f80fd5b5061036960995481565b348015610882575f80fd5b50610396610891366004614dad565b611ed1565b3480156108a1575f80fd5b506103696108b0366004614dec565b60a56020525f908152604090205481565b3480156108cc575f80fd5b5061036960a85481565b3480156108e1575f80fd5b506103966108f0366004614f2c565b611f9b565b348015610900575f80fd5b5061039661090f366004614dec565b61226a565b34801561091f575f80fd5b5061039661092e366004614e92565b6122d0565b34801561093e575f80fd5b5061039661094d366004614fa0565b6126bc565b610396610960366004614fbb565b61284f565b348015610970575f80fd5b5061036960985481565b348015610985575f80fd5b50610396610994366004614dec565b612f64565b6103966109a7366004614ff1565b61304a565b3480156109b7575f80fd5b506097546104f39073ffffffffffffffffffffffffffffffffffffffff1681565b3480156109e3575f80fd5b5061033f6109f2366004614dad565b613aed565b348015610a02575f80fd5b50610369609a5481565b348015610a17575f80fd5b50610396610a26366004614dad565b613b44565b348015610a36575f80fd5b50610396610a45366004614dec565b613c01565b348015610a55575f80fd5b5061036960a95481565b610a67613cb5565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b8b613cb5565b5f8111610bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610af2565b5f80610c008585613d36565b915091505f610c13836001015160c01c90565b5f81815260a160205260409020549091508214610c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b5f60a181610c9a878561508b565b81526020019081526020015f205414610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610af2565b609d548111610dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610af2565b610dd060018261509e565b609e555b8315610f6757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610e1c81613aed565b15610ea2575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610e7490849061508b565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610f1f575060a85481145b15610f29575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610dd4575b505050505050565b60a85415610fd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b610fe1613d51565b5f80610fed8484613d36565b915091505f611000836001015160c01c90565b5f81815260a160205260409020549091508214611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b6110828161156c565b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610af2565b6110f181613aed565b15611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610af2565b5f81815260a4602052604090206003015460ff16156111d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610af2565b5f81815260a2602052604090206001015442101561124d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610af2565b605983015160a05f61126060018561509e565b81526020019081526020015f2054146112d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610af2565b5f81815260a060205260409020541561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610af2565b80609d54600101146113b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610af2565b609d819055600160a35f6113cd866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a0602052604090205561143860f98401601185015160c01c600986015160c01c613dbe565b60a25f61144660018461509e565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061147f908461509e565b81526020019081526020015f205f905560a45f60018361149f919061509e565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611548866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061159457505f82815260a1602052604090205415155b92915050565b6115a2613cb5565b5f811180156115b357506099548114155b611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610af2565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561167f57505f5460ff8083169116105b61170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610af2565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556117465f5460ff1690565b60ff166002146117b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610af2565b8161183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610af2565b609e545f90815260ab602052604090205461186857609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611653565b6118ca613cb5565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610af2565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b78565b6119d9613cb5565b6119e25f613e94565b565b5f54610100900460ff1615808015611a0257505f54600160ff909116105b80611a1b5750303b158015611a1b57505f5460ff166001145b611aa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610af2565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611b03575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580611b3a575073ffffffffffffffffffffffffffffffffffffffff8516155b15611b71576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716611bee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610af2565b611bf6613f0a565b611bfe613fa8565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611da4575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611db5613cb5565b73ffffffffffffffffffffffffffffffffffffffff811615801590611df55750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b611e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610af2565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611ed9613cb5565b5f81118015611ee9575060648111155b8015611ef7575060a9548114155b611f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610af2565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611653565b60a85415612005576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b61200d613d51565b5f806120198686613d36565b915091505f61202c836001015160c01c90565b5f81815260a1602052604090205490915082146120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b6120ae81613aed565b612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610af2565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161218b9161508b565b1161221f575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261221a91839190614046565b611da4565b61222a8386866141c9565b611da481336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506143a3565b612272613cb5565b60aa80545f9091556122848282614489565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611653565b6122d8613cb5565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610af2565b5f806123758484613d36565b915091505f612388836001015160c01c90565b905080156123f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610af2565b5f6123fe846079015190565b905080612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610af2565b600984015160c01c156124d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610af2565b5f6124e2856019015190565b03612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610af2565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612575856039015190565b146125dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610af2565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6126c4613cb5565b801561281d576126d261455b565b60a65460ff16156127cf5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a5909252822080549192909161273390849061508b565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b6128256145e0565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f2565b50565b335f908152609f602052604090205460ff166128c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610af2565b60a85415612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b612939613d51565b60a65460ff16156129a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610af2565b8167ffffffffffffffff16609d5410612a1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610af2565b67ffffffffffffffff82165f90815260a160205260409020548114612a9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b612aaf8267ffffffffffffffff1661156c565b612b15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610af2565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615612bb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610af2565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610af2565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cef91906150b1565b341015612d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610af2565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612ec491815260200190565b60405180910390a35f609d546001612edc919061508b565b90505b609e548111612f34578267ffffffffffffffff168114612f22576099545f82815260a2602052604081206001018054909190612f1c90849061508b565b90915550505b80612f2c816150c8565b915050612edf565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b335f90815260a5602052604081205490819003612fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610af2565b335f90815260a56020526040812055612ff68282614489565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161303e91815260200190565b60405180910390a25050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156130d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130f491906150ff565b61315a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610af2565b60a854156131c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b6131cc613d51565b6131d9602083018361511a565b60ff1615613243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610af2565b5f613251604084018461513a565b915050806132bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610af2565b6080830135613326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610af2565b60a0830135613391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610af2565b5f806133a86133a3602087018761513a565b613d36565b915091505f6133bb836001015160c01c90565b90505f60a1816133cc84600161508b565b81526020019081526020015f205414613441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610af2565b609e5481146134ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610af2565b5f81815260a160205260409020548214613522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610af2565b5f81815260ab602052604090205460808701351461359c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610af2565b5f6135ab846011015160c01c90565b90505f808061360a6135c060408c018c61513a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250889150613605905060608f018f61513a565b614637565b94850194938401939250905061362360608b018b61513a565b905061010060ff85010460200214613697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610af2565b600194909401935f8049156136ad575f496136cf565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505f6136df60608d018d61513a565b6136eb915060f961508b565b90506040519850602081028901604052613719898d5f016020810190613711919061511a565b60ff166147d2565b60c087811b60018b015285811b60098b015286811b60118b015260198a0184905260808d013560598b015260a08d013560798b01528c013560998a01526137868961376760208e018e61513a565b60405161377592919061519b565b604051809103902060b99190910152565b60d989018890526137a38961379e60608f018f61513a565b6147d9565b603989018290528089205f88815260a1602090815260408083209390935560ab905290812060a08e0135905560a65460ff16156138095760a7545f90815260a4602052604090206002015460995442916137fc9161508b565b613806919061509e565b90505b60405180608001604052804281526020018260985442613829919061508b565b613833919061508b565b81526020016138848f806040019061384b919061513a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506147e592505050565b815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015613912573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061393691906150b1565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e89905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508c35906139ab906139a5908f018f61513a565b5f61483c565b5f8e80604001906139bc919061513a565b6040518663ffffffff1660e01b81526004016139dc9594939291906151f1565b602060405180830381865afa1580156139f7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a1b91906150ff565b613aa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610af2565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906115945750505f90815260a46020526040902060030154610100900460ff161590565b613b4c613cb5565b5f81118015613b5d57506098548114155b613bc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610af2565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611653565b613c09613cb5565b73ffffffffffffffffffffffffffffffffffffffff8116613cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610af2565b61284c81613e94565b60335473ffffffffffffffffffffffffffffffffffffffff1633146119e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610af2565b5f805f613d438585614890565b812090969095509350505050565b60655460ff16156119e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610af2565b805f03613dca57505050565b8082035f805b83811015610f6757610100818503811115613dea57508084035b8651609b546040517f55f613ce00000000000000000000000000000000000000000000000000000000815260048101879052602481018490526044810183905260209099019891945073ffffffffffffffffffffffffffffffffffffffff16906355f613ce906064015f604051808303815f87803b158015613e6a575f80fd5b505af1158015613e7c573d5f803e3d5ffd5b50505050610100840193505061010081019050613dd0565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613fa0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b6119e261499b565b5f54610100900460ff1661403e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b6119e2614a5b565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af11580156140d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140fb91906150b1565b5f86815260a4602052604090206001015490915061411a90829061508b565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a59091528120805490919061416690849061508b565b9091555050604051614179908490615271565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80614230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610af2565b5f61423f846001015160c01c90565b90505f61424d856039015190565b90505f7f000000000000000000000000000000000000000000000000000000000000000061427c876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a84861434b885160f81c90565b858888866040518663ffffffff1660e01b815260040161436f95949392919061529d565b5f6040518083038186803b158015614385575f80fd5b505afa158015614397573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a9549091906064906143c790846152ce565b6143d191906152e5565b90506143dd818361509e565b60aa5f8282546143ed919061508b565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a560205260408120805483929061442690849061508b565b9091555050604051614439908490615271565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015614557575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146144e5576040519150601f19603f3d011682016040523d82523d5f602084013e6144ea565b606091505b5050905080614555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610af2565b505b5050565b614563613d51565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586145b63390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6145e8614afa565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336145b6565b60405185515f91829160208901919081908490614655908590614b66565b90506002840193505f5b818110156146d957603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f6146af603c836152ce565b6146b9908761508b565b90505f6146ca82603a015160f01c90565b9790970196505060010161465f565b506020850282016040525b80156147be575f6146f985603a015160f01c90565b905061470983828d8d8d8d614bfb565b92505f61471a866038015160f01c90565b905081811015614786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610af2565b50998a01999890980197603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016146e4565b508190039020989197509095505050505050565b8082535050565b808260f9850137505050565b5f805f6020840190506002810191505f614800828651614b66565b90505f5b61480f60018361509e565b81101561482557603c9390930192600101614804565b505f614832845160c01c90565b9695505050505050565b60605f8080808061484f888a018a61540a565b955095509550955095505081871061486d5794506148899350505050565b838710614881578295505050505050614889565b509293505050505b9392505050565b5f8160f98110156148fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610af2565b6040519150808483378082016040525f61491b836009015160c01c90565b905061010060ff82010460200260f9018214614993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610af2565b509250929050565b5f54610100900460ff16614a31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16614af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b6119e233613e94565b60655460ff166119e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610af2565b5f614b72835160f01c90565b9050805f03614bad576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614bb8603c826152ce565b614bc390600261508b565b8214611594576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f855f03614c0a575085614832565b609b5473ffffffffffffffffffffffffffffffffffffffff165f80805b89811015614d0a5760ff89169150600889901c811580614c45575082155b15614c54578060200288013593505b600184841c165f03614cf9576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018a90525f9073ffffffffffffffffffffffffffffffffffffffff87169063ae453cd590602401602060405180830381865afa158015614ccb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614cef91906150b1565b8d52506020909b019a5b506001988901989788019701614c27565b505060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88011681811c60011615614d9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f63616e6e6f7420736b6970206c617374204c31206d65737361676500000000006044820152606401610af2565b509798975050505050505050565b5f60208284031215614dbd575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114614de7575f80fd5b919050565b5f60208284031215614dfc575f80fd5b61488982614dc4565b5f8083601f840112614e15575f80fd5b50813567ffffffffffffffff811115614e2c575f80fd5b602083019150836020828501011115614e43575f80fd5b9250929050565b5f805f60408486031215614e5c575f80fd5b833567ffffffffffffffff811115614e72575f80fd5b614e7e86828701614e05565b909790965060209590950135949350505050565b5f8060208385031215614ea3575f80fd5b823567ffffffffffffffff811115614eb9575f80fd5b614ec585828601614e05565b90969095509350505050565b5f805f805f8060c08789031215614ee6575f80fd5b614eef87614dc4565b9550614efd60208801614dc4565b9450614f0b60408801614dc4565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614f3f575f80fd5b843567ffffffffffffffff80821115614f56575f80fd5b614f6288838901614e05565b90965094506020870135915080821115614f7a575f80fd5b50614f8787828801614e05565b95989497509550505050565b801515811461284c575f80fd5b5f60208284031215614fb0575f80fd5b813561488981614f93565b5f8060408385031215614fcc575f80fd5b823567ffffffffffffffff81168114614fe3575f80fd5b946020939093013593505050565b5f8060408385031215615002575f80fd5b823567ffffffffffffffff80821115615019575f80fd5b9084019060e0828703121561502c575f80fd5b90925060208401359080821115615041575f80fd5b50830160608186031215615053575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156115945761159461505e565b818103818111156115945761159461505e565b5f602082840312156150c1575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150f8576150f861505e565b5060010190565b5f6020828403121561510f575f80fd5b815161488981614f93565b5f6020828403121561512a575f80fd5b813560ff81168114614889575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261516d575f80fd5b83018035915067ffffffffffffffff821115615187575f80fd5b602001915036819003821315614e43575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561524857845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615216565b505087604086015284810360608601526152638187896151aa565b9a9950505050505050505050565b5f82515f5b818110156152905760208186018101518583015201615276565b505f920191825250919050565b858152846020820152608060408201525f6152bc6080830185876151aa565b90508260608301529695505050505050565b80820281158282048414176115945761159461505e565b5f82615318577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615359575f80fd5b8135602067ffffffffffffffff808311156153765761537661531d565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156153b9576153b961531d565b60405293845260208187018101949081019250878511156153d8575f80fd5b6020870191505b848210156153ff576153f082614dc4565b835291830191908301906153df565b979650505050505050565b5f805f805f8060c0878903121561541f575f80fd5b86359550602087013567ffffffffffffffff8082111561543d575f80fd5b6154498a838b0161534a565b9650604089013595506060890135915080821115615465575f80fd5b6154718a838b0161534a565b94506080890135935060a089013591508082111561548d575f80fd5b5061549a89828a0161534a565b915050929550929550929556fea164736f6c6343000818000a" +var RollupDeployedBin = "0x608060405260043610610306575f3560e01c8063728cdbca11610191578063b35dac4e116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd14610a0c578063f2fde38b14610a2b578063fb1e8b0414610a4a575f80fd5b8063ddd8a3dc146109ac578063de8b3035146109d8578063dff7827e146109f7575f80fd5b8063cd4edc69116100b7578063cd4edc6914610965578063ce5db8d614610978578063d279c1911461098d575f80fd5b8063b35dac4e14610908578063b3e0a50914610927578063bedb86fb14610946575f80fd5b8063a415d8dc1161013c578063abc8d68d11610117578063abc8d68d146108a9578063b31a77d3146108d4578063b3484425146108e9575f80fd5b8063a415d8dc14610847578063a479265d14610875578063a4f209b01461088a575f80fd5b80638f1d37761161016c5780638f1d37761461072d578063910129d4146107f757806397fc007c14610828575f80fd5b8063728cdbca146106cb57806388b1ea09146106ea5780638da5cb5b14610703575f80fd5b80632b7ac3f3116102515780635ef7a94a116101fc57806368589dfa116101d757806368589dfa1461066d5780636c578c1d14610698578063715018a6146106b7575f80fd5b80635ef7a94a146105a25780635f77cf1d14610602578063612672901461064e575f80fd5b80634a8d544f1161022c5780634a8d544f1461055957806357e0af6c1461056c5780635c975abb1461058b575f80fd5b80632b7ac3f3146104c75780633b70c18a146105185780633e001b6614610544575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b366004614b80565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b50610396610391366004614bbf565b610a5f565b005b3480156103a3575f80fd5b506103966103b2366004614c1d565b610b83565b3480156103c2575f80fd5b5061033f6103d1366004614b80565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b50610396610408366004614c65565b610f6f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c366004614b80565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c366004614b80565b61156e565b34801561047c575f80fd5b5061036961048b366004614b80565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b6366004614b80565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104f39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161034b565b348015610523575f80fd5b50609b546104f39073ffffffffffffffffffffffffffffffffffffffff1681565b34801561054f575f80fd5b5061036960aa5481565b610396610567366004614ca4565b61159c565b348015610577575f80fd5b50610396610586366004614b80565b611f7e565b348015610596575f80fd5b5060655460ff1661033f565b3480156105ad575f80fd5b506105e26105bc366004614b80565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b34801561060d575f80fd5b506106357f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b348015610659575f80fd5b50610396610668366004614b80565b612043565b348015610678575f80fd5b50610369610687366004614b80565b60ab6020525f908152604090205481565b3480156106a3575f80fd5b506103966106b2366004614bbf565b6122a6565b3480156106c2575f80fd5b506103966123b5565b3480156106d6575f80fd5b506103966106e5366004614d11565b6123c8565b3480156106f5575f80fd5b5060a65461033f9060ff1681565b34801561070e575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166104f3565b348015610738575f80fd5b506107a6610747366004614b80565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b348015610802575f80fd5b5061033f610811366004614b80565b5f90815260a4602052604090206003015460ff1690565b348015610833575f80fd5b50610396610842366004614bbf565b612791565b348015610852575f80fd5b5061033f610861366004614bbf565b609f6020525f908152604090205460ff1681565b348015610880575f80fd5b5061036960995481565b348015610895575f80fd5b506103966108a4366004614b80565b6128b5565b3480156108b4575f80fd5b506103696108c3366004614bbf565b60a56020525f908152604090205481565b3480156108df575f80fd5b5061036960a85481565b3480156108f4575f80fd5b50610396610903366004614d6c565b61297f565b348015610913575f80fd5b50610396610922366004614bbf565b612c4e565b348015610932575f80fd5b50610396610941366004614c65565b612cb4565b348015610951575f80fd5b50610396610960366004614de0565b6130a0565b610396610973366004614dfb565b613233565b348015610983575f80fd5b5061036960985481565b348015610998575f80fd5b506103966109a7366004614bbf565b613948565b3480156109b7575f80fd5b506097546104f39073ffffffffffffffffffffffffffffffffffffffff1681565b3480156109e3575f80fd5b5061033f6109f2366004614b80565b613a2e565b348015610a02575f80fd5b50610369609a5481565b348015610a17575f80fd5b50610396610a26366004614b80565b613a85565b348015610a36575f80fd5b50610396610a45366004614bbf565b613b42565b348015610a55575f80fd5b5061036960a95481565b610a67613bf6565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b8b613bf6565b5f8111610bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610af2565b5f80610c008585613c77565b915091505f610c13836001015160c01c90565b5f81815260a160205260409020549091508214610c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b5f60a181610c9a8785614e5e565b81526020019081526020015f205414610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610af2565b609d548111610dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610af2565b610dd0600182614e71565b609e555b8315610f6757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610e1c81613a2e565b15610ea2575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610e74908490614e5e565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610f1f575060a85481145b15610f29575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610dd4575b505050505050565b60a85415610fd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b610fe1613c92565b5f80610fed8484613c77565b915091505f611000836001015160c01c90565b5f81815260a160205260409020549091508214611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b6110828161156e565b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610af2565b6110f181613a2e565b15611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610af2565b5f81815260a4602052604090206003015460ff16156111d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610af2565b5f81815260a2602052604090206001015442101561124d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610af2565b605983015160a05f611260600185614e71565b81526020019081526020015f2054146112d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610af2565b5f81815260a060205260409020541561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610af2565b80609d54600101146113b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610af2565b609d819055600160a35f6113cd866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a0602052604090205561143a61142d846011015160c01c90565b600985015160c01c613cff565b60a25f611448600184614e71565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906114819084614e71565b81526020019081526020015f205f905560a45f6001836114a19190614e71565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61154a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061159657505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611622573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116469190614e84565b6116ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610af2565b60a85415611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b61171e613c92565b61172b6020830183614e9f565b60ff1615611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610af2565b5f6117a36040840184614ebf565b9150508061180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610af2565b6060830135611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610af2565b60808301356118e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610af2565b5f806118fa6118f56020870187614ebf565b613c77565b915091505f61190d836001015160c01c90565b90505f60a18161191e846001614e5e565b81526020019081526020015f205414611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610af2565b609e5481146119fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610af2565b5f81815260a160205260409020548214611a74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610af2565b5f81815260ab6020526040902054606087013514611aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610af2565b5f611afd846011015160c01c90565b90505f8080611b4f611b1260408c018c614ebf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250889150613dc99050565b600196909601959485019493840193925090505f804915611b71575f49611b93565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b60408051611f2081019091529850905060f9611bbe89611bb660208f018f614e9f565b60ff16613f60565b60c087811b60018b015285811b60098b015286901b60118a01526019890183905260608c013560598a015260808c013560798a015260a08c013560998a0152611c2d89611c0e60208e018e614ebf565b604051611c1c929190614f20565b604051809103902060b99190910152565b60d98901889052603989018290528089205f88815260a1602090815260408083209390935560ab905290812060808e0135905560a65460ff1615611c9a5760a7545f90815260a460205260409020600201546099544291611c8d91614e5e565b611c979190614e71565b90505b60405180608001604052804281526020018260985442611cba9190614e5e565b611cc49190614e5e565b8152602001611d158f8060400190611cdc9190614ebf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613f6792505050565b815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611da3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc79190614f2f565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e89905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508c3590611e3c90611e36908f018f614ebf565b5f613fbe565b5f8e8060400190611e4d9190614ebf565b6040518663ffffffff1660e01b8152600401611e6d959493929190614f8d565b602060405180830381865afa158015611e88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eac9190614e84565b611f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610af2565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b611f86613bf6565b5f81118015611f9757506099548114155b611ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610af2565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561206357505f5460ff8083169116105b6120ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610af2565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff83161761010017905561212a5f5460ff1690565b60ff16600214612196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610af2565b81612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610af2565b609e545f90815260ab602052604090205461224c57609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001612037565b6122ae613bf6565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1661233c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610af2565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b78565b6123bd613bf6565b6123c65f614012565b565b5f54610100900460ff16158080156123e657505f54600160ff909116105b806123ff5750303b1580156123ff57505f5460ff166001145b61248b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610af2565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156124e7575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff8616158061251e575073ffffffffffffffffffffffffffffffffffffffff8516155b15612555576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166125d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610af2565b6125da614088565b6125e2614126565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015612788575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b612799613bf6565b73ffffffffffffffffffffffffffffffffffffffff8116158015906127d95750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b61283f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610af2565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6128bd613bf6565b5f811180156128cd575060648111155b80156128db575060a9548114155b612941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610af2565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101612037565b60a854156129e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b6129f1613c92565b5f806129fd8686613c77565b915091505f612a10836001015160c01c90565b5f81815260a160205260409020549091508214612a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b612a9281613a2e565b612af8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610af2565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556099546002909101544291612b6f91614e5e565b11612c03575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612bfe918391906141c4565b612788565b612c0e838686614347565b61278881336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614521565b612c56613bf6565b60aa80545f909155612c688282614607565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101612037565b612cbc613bf6565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610af2565b5f80612d598484613c77565b915091505f612d6c836001015160c01c90565b90508015612dd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610af2565b5f612de2846079015190565b905080612e4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610af2565b600984015160c01c15612eba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610af2565b5f612ec6856019015190565b03612f2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610af2565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612f59856039015190565b14612fc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610af2565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6130a8613bf6565b8015613201576130b66146d9565b60a65460ff16156131b35760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091613117908490614e5e565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b61320961475e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336131d6565b50565b335f908152609f602052604090205460ff166132ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610af2565b60a85415613315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b61331d613c92565b60a65460ff161561338a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610af2565b8167ffffffffffffffff16609d54106133ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610af2565b67ffffffffffffffff82165f90815260a160205260409020548114613480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b6134938267ffffffffffffffff1661156e565b6134f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610af2565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff161561359b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610af2565b67ffffffffffffffff82165f90815260a260205260409020600101544210613645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610af2565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136d39190614f2f565b34101561373c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610af2565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516138a891815260200190565b60405180910390a35f609d5460016138c09190614e5e565b90505b609e548111613918578267ffffffffffffffff168114613906576099545f82815260a2602052604081206001018054909190613900908490614e5e565b90915550505b806139108161500d565b9150506138c3565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b335f90815260a56020526040812054908190036139c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610af2565b335f90815260a560205260408120556139da8282614607565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051613a2291815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906115965750505f90815260a46020526040902060030154610100900460ff161590565b613a8d613bf6565b5f81118015613a9e57506098548114155b613b04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610af2565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101612037565b613b4a613bf6565b73ffffffffffffffffffffffffffffffffffffffff8116613bed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610af2565b61323081614012565b60335473ffffffffffffffffffffffffffffffffffffffff1633146123c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610af2565b5f805f613c8485856147b5565b812090969095509350505050565b60655460ff16156123c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610af2565b805f03613d0a575050565b8082035f5b82811015613dc357610100818403811115613d2957508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613d99575f80fd5b505af1158015613dab573d5f803e3d5ffd5b50505050610100830192505061010081019050613d0f565b50505050565b60405183515f91829160208701919081908490613de7908590614838565b90506002840193505f5b81811015613e6b57603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f613e41603c83615044565b613e4b9087614e5e565b90505f613e5c82603a015160f01c90565b97909701965050600101613df1565b506020850282016040525b8015613f4e575f613e8b85603a015160f01c90565b9050613e9983828b8b6148cd565b92505f613eaa866038015160f01c90565b905081811015613f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610af2565b50978801979690960195603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613e76565b50819003902096919550909350505050565b8082535050565b5f805f6020840190506002810191505f613f82828651614838565b90505f5b613f91600183614e71565b811015613fa757603c9390930192600101613f86565b505f613fb4845160c01c90565b9695505050505050565b60605f80808080613fd1888a018a615148565b9550955095509550955050818710613fef57945061400b9350505050565b83871061400357829550505050505061400b565b509293505050505b9392505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661411e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b6123c66149b5565b5f54610100900460ff166141bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b6123c6614a75565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614255573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142799190614f2f565b5f86815260a46020526040902060010154909150614298908290614e5e565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a5909152812080549091906142e4908490614e5e565b90915550506040516142f79084906151e5565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b806143ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610af2565b5f6143bd846001015160c01c90565b90505f6143cb856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006143fa876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a8486144c9885160f81c90565b858888866040518663ffffffff1660e01b81526004016144ed959493929190615211565b5f6040518083038186803b158015614503575f80fd5b505afa158015614515573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a9549091906064906145459084615044565b61454f9190615242565b905061455b8183614e71565b60aa5f82825461456b9190614e5e565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a56020526040812080548392906145a4908490614e5e565b90915550506040516145b79084906151e5565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156146d5575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614663576040519150601f19603f3d011682016040523d82523d5f602084013e614668565b606091505b50509050806146d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610af2565b505b5050565b6146e1613c92565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586147343390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614766614b14565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614734565b5f8160f9811015614822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610af2565b6040519150808483378082016040529250929050565b5f614844835160f01c90565b9050805f0361487f576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61488a603c82615044565b614895906002614e5e565b8214611596576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f835f036148dc5750836149ad565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b858110156149a7576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa15801561496a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061498e9190614f2f565b88525060209096019560019485019493840193016148f7565b50859150505b949350505050565b5f54610100900460ff16614a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16614b0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b6123c633614012565b60655460ff166123c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610af2565b5f60208284031215614b90575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114614bba575f80fd5b919050565b5f60208284031215614bcf575f80fd5b61400b82614b97565b5f8083601f840112614be8575f80fd5b50813567ffffffffffffffff811115614bff575f80fd5b602083019150836020828501011115614c16575f80fd5b9250929050565b5f805f60408486031215614c2f575f80fd5b833567ffffffffffffffff811115614c45575f80fd5b614c5186828701614bd8565b909790965060209590950135949350505050565b5f8060208385031215614c76575f80fd5b823567ffffffffffffffff811115614c8c575f80fd5b614c9885828601614bd8565b90969095509350505050565b5f8060408385031215614cb5575f80fd5b823567ffffffffffffffff80821115614ccc575f80fd5b9084019060c08287031215614cdf575f80fd5b90925060208401359080821115614cf4575f80fd5b50830160608186031215614d06575f80fd5b809150509250929050565b5f805f805f8060c08789031215614d26575f80fd5b614d2f87614b97565b9550614d3d60208801614b97565b9450614d4b60408801614b97565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614d7f575f80fd5b843567ffffffffffffffff80821115614d96575f80fd5b614da288838901614bd8565b90965094506020870135915080821115614dba575f80fd5b50614dc787828801614bd8565b95989497509550505050565b8015158114613230575f80fd5b5f60208284031215614df0575f80fd5b813561400b81614dd3565b5f8060408385031215614e0c575f80fd5b823567ffffffffffffffff81168114614e23575f80fd5b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561159657611596614e31565b8181038181111561159657611596614e31565b5f60208284031215614e94575f80fd5b815161400b81614dd3565b5f60208284031215614eaf575f80fd5b813560ff8116811461400b575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ef2575f80fd5b83018035915067ffffffffffffffff821115614f0c575f80fd5b602001915036819003821315614c16575f80fd5b818382375f9101908152919050565b5f60208284031215614f3f575f80fd5b5051919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614fe457845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101614fb2565b50508760408601528481036060860152614fff818789614f46565b9a9950505050505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361503d5761503d614e31565b5060010190565b808202811582820484141761159657611596614e31565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615097575f80fd5b8135602067ffffffffffffffff808311156150b4576150b461505b565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156150f7576150f761505b565b6040529384526020818701810194908101925087851115615116575f80fd5b6020870191505b8482101561513d5761512e82614b97565b8352918301919083019061511d565b979650505050505050565b5f805f805f8060c0878903121561515d575f80fd5b86359550602087013567ffffffffffffffff8082111561517b575f80fd5b6151878a838b01615088565b96506040890135955060608901359150808211156151a3575f80fd5b6151af8a838b01615088565b94506080890135935060a08901359150808211156151cb575f80fd5b506151d889828a01615088565b9150509295509295509295565b5f82515f5b8181101561520457602081860181015185830152016151ea565b505f920191825250919050565b858152846020820152608060408201525f615230608083018587614f46565b90508260608301529695505050505050565b5f82615275577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50049056fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { diff --git a/bindings/go.mod b/bindings/go.mod index 9bddb269e..27f5875bd 100644 --- a/bindings/go.mod +++ b/bindings/go.mod @@ -4,7 +4,7 @@ go 1.22 replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3.1 -require github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 +require github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e require ( github.com/VictoriaMetrics/fastcache v1.12.2 // indirect diff --git a/bindings/go.sum b/bindings/go.sum index d6e55c303..6c525f26a 100644 --- a/bindings/go.sum +++ b/bindings/go.sum @@ -109,8 +109,8 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 h1:4+cbRSS4lacSIC81RXxvA04UHhGVC4SHVn+bKeqhPSM= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e h1:pV7z8mnNQr+JJO2CGUzwAlzjrPnZ0YlO92izBaq00Zs= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= diff --git a/contracts/contracts/l1/rollup/IL1MessageQueue.sol b/contracts/contracts/l1/rollup/IL1MessageQueue.sol index 96b1e0006..3e9a4734b 100644 --- a/contracts/contracts/l1/rollup/IL1MessageQueue.sol +++ b/contracts/contracts/l1/rollup/IL1MessageQueue.sol @@ -33,8 +33,7 @@ interface IL1MessageQueue { /// @notice Emitted when some L1 => L2 transactions are included in L1. /// @param startIndex The start index of messages popped. /// @param count The number of messages popped. - /// @param skippedBitmap A bitmap indicates whether a message is skipped. - event DequeueTransaction(uint256 startIndex, uint256 count, uint256 skippedBitmap); + event DequeueTransaction(uint256 startIndex, uint256 count); /// @notice Emitted when a message is dropped from L1. /// @param index The index of message dropped. @@ -96,10 +95,6 @@ interface IL1MessageQueue { bytes calldata data ) external view returns (bytes32); - /// @notice Return whether the message is skipped. - /// @param queueIndex The queue index of the message to check. - function isMessageSkipped(uint256 queueIndex) external view returns (bool); - /// @notice Return whether the message is dropped. /// @param queueIndex The queue index of the message to check. function isMessageDropped(uint256 queueIndex) external view returns (bool); @@ -136,8 +131,7 @@ interface IL1MessageQueue { /// /// @param startIndex The start index to pop. /// @param count The number of messages to pop. - /// @param skippedBitmap A bitmap indicates whether a message is skipped. - function popCrossDomainMessage(uint256 startIndex, uint256 count, uint256 skippedBitmap) external; + function popCrossDomainMessage(uint256 startIndex, uint256 count) external; /// @notice Drop a skipped message from the queue. function dropCrossDomainMessage(uint256 index) external; diff --git a/contracts/contracts/l1/rollup/IRollup.sol b/contracts/contracts/l1/rollup/IRollup.sol index e27e9564c..680a550d1 100644 --- a/contracts/contracts/l1/rollup/IRollup.sol +++ b/contracts/contracts/l1/rollup/IRollup.sol @@ -9,7 +9,6 @@ interface IRollup { /// @param version The version of current batch. /// @param parentBatchHeader The header of parent batch, see the comments of `BatchHeaderV0Codec`. /// @param blockContexts The block contexts of current batch. - /// @param skippedL1MessageBitmap The bitmap indicates whether each L1 message is skipped or not. /// @param prevStateRoot The state root of parent batch. /// @param postStateRoot The state root of current batch. /// @param withdrawalRoot The withdraw trie root of current batch. @@ -17,7 +16,6 @@ interface IRollup { uint8 version; bytes parentBatchHeader; bytes blockContexts; - bytes skippedL1MessageBitmap; bytes32 prevStateRoot; bytes32 postStateRoot; bytes32 withdrawalRoot; diff --git a/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol b/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol index fdc9d25c4..de353fe91 100644 --- a/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol +++ b/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol @@ -51,8 +51,8 @@ contract L1MessageQueueWithGasPriceOracle is OwnableUpgradeable, IL1MessageQueue /// @dev The bitmap for dropped messages, where `droppedMessageBitmap[i]` keeps the bits from `[i*256, (i+1)*256)`. BitMapsUpgradeable.BitMap private droppedMessageBitmap; - /// @dev The bitmap for skipped messages, where `skippedMessageBitmap[i]` keeps the bits from `[i*256, (i+1)*256)`. - mapping(uint256 => uint256) private skippedMessageBitmap; + /// @dev The bitmap for skipped messages, where `skippedMessageBitmap[i]` keeps the bits from `[i*256, (i+1)*256)`. Deprecated. + mapping(uint256 => uint256) private __skippedMessageBitmap; /// @inheritdoc IL1MessageQueueWithGasPriceOracle address public whitelistChecker; @@ -260,17 +260,9 @@ contract L1MessageQueueWithGasPriceOracle is OwnableUpgradeable, IL1MessageQueue return hash; } - /// @inheritdoc IL1MessageQueue - function isMessageSkipped(uint256 _queueIndex) external view returns (bool) { - if (_queueIndex >= pendingQueueIndex) return false; - - return _isMessageSkipped(_queueIndex); - } - /// @inheritdoc IL1MessageQueue function isMessageDropped(uint256 _queueIndex) external view returns (bool) { - // it should be a skipped message first. - return _isMessageSkipped(_queueIndex) && droppedMessageBitmap.get(_queueIndex); + return droppedMessageBitmap.get(_queueIndex); } /***************************** @@ -320,35 +312,23 @@ contract L1MessageQueueWithGasPriceOracle is OwnableUpgradeable, IL1MessageQueue } /// @inheritdoc IL1MessageQueue - function popCrossDomainMessage(uint256 _startIndex, uint256 _count, uint256 _skippedBitmap) external { + function popCrossDomainMessage(uint256 _startIndex, uint256 _count) external { require(_msgSender() == ROLLUP_CONTRACT, "Only callable by the rollup"); require(_count <= 256, "pop too many messages"); require(pendingQueueIndex == _startIndex, "start index mismatch"); unchecked { - // clear extra bits in `_skippedBitmap`, and if _count = 256, it's designed to overflow. - uint256 mask = (1 << _count) - 1; - _skippedBitmap &= mask; - - uint256 bucket = _startIndex >> 8; - uint256 offset = _startIndex & 0xff; - skippedMessageBitmap[bucket] |= _skippedBitmap << offset; - if (offset + _count > 256) { - skippedMessageBitmap[bucket + 1] = _skippedBitmap >> (256 - offset); - } - pendingQueueIndex = _startIndex + _count; } - emit DequeueTransaction(_startIndex, _count, _skippedBitmap); + emit DequeueTransaction(_startIndex, _count); } /// @inheritdoc IL1MessageQueue function dropCrossDomainMessage(uint256 _index) external onlyMessenger { require(_index < pendingQueueIndex, "cannot drop pending message"); - require(_isMessageSkipped(_index), "drop non-skipped message"); require(!droppedMessageBitmap.get(_index), "message already dropped"); droppedMessageBitmap.set(_index); @@ -409,11 +389,4 @@ contract L1MessageQueueWithGasPriceOracle is OwnableUpgradeable, IL1MessageQueue uint256 intrinsicGas = calculateIntrinsicGasFee(_calldata); require(_gasLimit >= intrinsicGas, "Insufficient gas limit, must be above intrinsic gas"); } - - /// @dev Returns whether the bit at `index` is set. - function _isMessageSkipped(uint256 index) internal view returns (bool) { - uint256 bucket = index >> 8; - uint256 mask = 1 << (index & 0xff); - return skippedMessageBitmap[bucket] & mask != 0; - } } diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index b9ca1afd2..905913f94 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -254,28 +254,19 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { (dataHash, _totalNumL1Messages) = _commitBatch( batchDataInput.blockContexts, _totalL1MessagesPoppedInBatch, - _totalL1MessagesPoppedOverall, - batchDataInput.skippedL1MessageBitmap + _totalL1MessagesPoppedOverall ); unchecked { _totalL1MessagesPoppedInBatch += _totalNumL1Messages; _totalL1MessagesPoppedOverall += _totalNumL1Messages; } - // check the length of bitmap - unchecked { - require( - ((_totalL1MessagesPoppedInBatch + 255) / 256) * 32 == batchDataInput.skippedL1MessageBitmap.length, - "wrong bitmap length" - ); - } assembly { _batchIndex := add(_batchIndex, 1) // increase batch index } bytes32 _blobVersionedHash = (blobhash(0) == bytes32(0)) ? ZERO_VERSIONED_HASH : blobhash(0); { - uint256 _headerLength = BatchHeaderCodecV0.BATCH_HEADER_FIXED_LENGTH + - batchDataInput.skippedL1MessageBitmap.length; + uint256 _headerLength = BatchHeaderCodecV0.BATCH_HEADER_LENGTH; assembly { _batchPtr := mload(0x40) mstore(0x40, add(_batchPtr, mul(_headerLength, 32))) @@ -291,7 +282,6 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { BatchHeaderCodecV0.storeWithdrawRootHash(_batchPtr, batchDataInput.withdrawalRoot); BatchHeaderCodecV0.storeSequencerSetVerifyHash(_batchPtr, keccak256(batchSignatureInput.sequencerSets)); BatchHeaderCodecV0.storeParentBatchHash(_batchPtr, _parentBatchHash); - BatchHeaderCodecV0.storeSkippedBitmap(_batchPtr, batchDataInput.skippedL1MessageBitmap); BatchHeaderCodecV0.storeBlobVersionedHash(_batchPtr, _blobVersionedHash); committedBatches[_batchIndex] = BatchHeaderCodecV0.computeBatchHash(_batchPtr, _headerLength); committedStateRoots[_batchIndex] = batchDataInput.postStateRoot; @@ -540,7 +530,6 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { // Pop finalized and non-skipped message from L1MessageQueue. _popL1Messages( - BatchHeaderCodecV0.getSkippedBitmapPtr(memPtr), BatchHeaderCodecV0.getTotalL1MessagePopped(memPtr), BatchHeaderCodecV0.getL1MessagePopped(memPtr) ); @@ -605,25 +594,19 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { **********************/ /// @dev Internal function to pop finalized l1 messages. - /// @param bitmapPtr The memory offset of `skippedL1MessageBitmap`. /// @param totalL1MessagePopped The total number of L1 messages popped in all batches including current batch. /// @param l1MessagePopped The number of L1 messages popped in current batch. - function _popL1Messages(uint256 bitmapPtr, uint256 totalL1MessagePopped, uint256 l1MessagePopped) internal { + function _popL1Messages(uint256 totalL1MessagePopped, uint256 l1MessagePopped) internal { if (l1MessagePopped == 0) return; unchecked { uint256 startIndex = totalL1MessagePopped - l1MessagePopped; - uint256 bitmap; for (uint256 i = 0; i < l1MessagePopped; i += 256) { uint256 _count = 256; if (l1MessagePopped - i < _count) { _count = l1MessagePopped - i; } - assembly { - bitmap := mload(bitmapPtr) - bitmapPtr := add(bitmapPtr, 0x20) - } - IL1MessageQueue(messageQueue).popCrossDomainMessage(startIndex, _count, bitmap); + IL1MessageQueue(messageQueue).popCrossDomainMessage(startIndex, _count); startIndex += 256; } } @@ -758,14 +741,12 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { /// @param _blockContexts The encoded block contexts to commit. /// @param _totalL1MessagesPoppedInBatch The total number of L1 messages popped in current batch. /// @param _totalL1MessagesPoppedOverall The total number of L1 messages popped in all batches including current batch. - /// @param _skippedL1MessageBitmap The bitmap indicates whether each L1 message is skipped or not. /// @return _dataHash The computed data hash for this batch. /// @return _totalNumL1MessagesInBatch The total number of L1 message popped in current batch function _commitBatch( bytes memory _blockContexts, uint256 _totalL1MessagesPoppedInBatch, - uint256 _totalL1MessagesPoppedOverall, - bytes calldata _skippedL1MessageBitmap + uint256 _totalL1MessagesPoppedOverall ) internal view returns (bytes32 _dataHash, uint256 _totalNumL1MessagesInBatch) { uint256 batchPtr; uint256 startDataPtr; @@ -802,8 +783,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { dataPtr, _numL1MessagesInBlock, _totalL1MessagesPoppedInBatch, - _totalL1MessagesPoppedOverall, - _skippedL1MessageBitmap + _totalL1MessagesPoppedOverall ); uint256 _numTransactionsInBlock = BatchCodecV0.getNumTransactions(batchPtr); require(_numTransactionsInBlock >= _numL1MessagesInBlock, "num txs less than num L1 msgs"); @@ -827,14 +807,12 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { /// @param _numL1Messages The number of L1 messages to load. /// @param _totalL1MessagesPoppedInBatch The total number of L1 messages popped in current batch. /// @param _totalL1MessagesPoppedOverall The total number of L1 messages popped in all batches including current batch. - /// @param _skippedL1MessageBitmap The bitmap indicates whether each L1 message is skipped or not. /// @return uint256 The new memory offset after loading. function _loadL1MessageHashes( uint256 _ptr, uint256 _numL1Messages, uint256 _totalL1MessagesPoppedInBatch, - uint256 _totalL1MessagesPoppedOverall, - bytes calldata _skippedL1MessageBitmap + uint256 _totalL1MessagesPoppedOverall ) internal view returns (uint256) { if (_numL1Messages == 0) { return _ptr; @@ -842,34 +820,16 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { IL1MessageQueue _messageQueue = IL1MessageQueue(messageQueue); unchecked { - uint256 _bitmap; - uint256 rem; for (uint256 i = 0; i < _numL1Messages; i++) { - uint256 quo = _totalL1MessagesPoppedInBatch >> 8; - rem = _totalL1MessagesPoppedInBatch & 0xff; - - // load bitmap every 256 bits - if (i == 0 || rem == 0) { - assembly { - _bitmap := calldataload(add(_skippedL1MessageBitmap.offset, mul(0x20, quo))) - } - } - if (((_bitmap >> rem) & 1) == 0) { - // message not skipped - bytes32 _hash = _messageQueue.getCrossDomainMessage(_totalL1MessagesPoppedOverall); - assembly { - mstore(_ptr, _hash) - _ptr := add(_ptr, 0x20) - } + bytes32 _hash = _messageQueue.getCrossDomainMessage(_totalL1MessagesPoppedOverall); + assembly { + mstore(_ptr, _hash) + _ptr := add(_ptr, 0x20) } _totalL1MessagesPoppedInBatch += 1; _totalL1MessagesPoppedOverall += 1; } - - // check last L1 message is not skipped, _totalL1MessagesPoppedInBatch must > 0 - rem = (_totalL1MessagesPoppedInBatch - 1) & 0xff; - require(((_bitmap >> rem) & 1) == 0, "cannot skip last L1 message"); } return _ptr; diff --git a/contracts/contracts/libraries/codec/BatchHeaderCodecV0.sol b/contracts/contracts/libraries/codec/BatchHeaderCodecV0.sol index de79c7737..1c80a4b25 100644 --- a/contracts/contracts/libraries/codec/BatchHeaderCodecV0.sol +++ b/contracts/contracts/libraries/codec/BatchHeaderCodecV0.sol @@ -18,11 +18,10 @@ pragma solidity ^0.8.24; /// * withdrawRootHash 32 bytes32 153 L2 withdrawal tree root hash /// * sequencerSetVerifyHash 32 bytes32 185 L2 sequencers set verify hash /// * parentBatchHash 32 bytes32 217 The parent batch hash -/// * skippedL1MessageBitmap dynamic uint256[] 249 A bitmap to indicate which L1 messages are skipped in the batch /// ``` library BatchHeaderCodecV0 { /// @dev The length of fixed parts of the batch header. - uint256 internal constant BATCH_HEADER_FIXED_LENGTH = 249; + uint256 internal constant BATCH_HEADER_LENGTH = 249; /// @notice Load batch header in calldata to memory. /// @param _batchHeader The encoded batch header bytes in calldata. @@ -30,20 +29,13 @@ library BatchHeaderCodecV0 { /// @return length The length in bytes of the batch header. function loadAndValidate(bytes calldata _batchHeader) internal pure returns (uint256 batchPtr, uint256 length) { length = _batchHeader.length; - require(length >= BATCH_HEADER_FIXED_LENGTH, "batch header length too small"); + require(length >= BATCH_HEADER_LENGTH, "batch header length too small"); // copy batch header to memory. assembly { batchPtr := mload(0x40) calldatacopy(batchPtr, _batchHeader.offset, length) mstore(0x40, add(batchPtr, length)) } - - // check batch header length - uint256 _l1MessagePopped = getL1MessagePopped(batchPtr); - - unchecked { - require(length == BATCH_HEADER_FIXED_LENGTH + ((_l1MessagePopped + 255) / 256) * 32, "wrong bitmap length"); - } } /// @notice Get the version of the batch header. @@ -133,26 +125,6 @@ library BatchHeaderCodecV0 { } } - /// @notice Get the start memory offset for skipped L1 messages bitmap. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @return _bitmapPtr the start memory offset for skipped L1 messages bitmap. - function getSkippedBitmapPtr(uint256 batchPtr) internal pure returns (uint256 _bitmapPtr) { - assembly { - _bitmapPtr := add(batchPtr, BATCH_HEADER_FIXED_LENGTH) - } - } - - /// @notice Get the skipped L1 messages bitmap. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @param index The index of bitmap to load. - /// @return _bitmap The bitmap from bits `index * 256` to `index * 256 + 255`. - function getSkippedBitmap(uint256 batchPtr, uint256 index) internal pure returns (uint256 _bitmap) { - assembly { - batchPtr := add(batchPtr, BATCH_HEADER_FIXED_LENGTH) - _bitmap := mload(add(batchPtr, mul(index, 32))) - } - } - /// @notice Store the version of batch header. /// @param batchPtr The start memory offset of the batch header in memory. /// @param _version The version of batch header. @@ -258,19 +230,6 @@ library BatchHeaderCodecV0 { } } - /// @notice Store the skipped L1 message bitmap of batch header. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @param _skippedL1MessageBitmap The skipped L1 message bitmap. - function storeSkippedBitmap(uint256 batchPtr, bytes calldata _skippedL1MessageBitmap) internal pure { - assembly { - calldatacopy( - add(batchPtr, BATCH_HEADER_FIXED_LENGTH), - _skippedL1MessageBitmap.offset, - _skippedL1MessageBitmap.length - ) - } - } - /// @notice Compute the batch hash. /// @dev Caller should make sure that the encoded batch header is correct. /// diff --git a/contracts/contracts/libraries/verifier/ISP1Verifier.sol b/contracts/contracts/libraries/verifier/ISP1Verifier.sol index 328089f27..d2f99aec4 100644 --- a/contracts/contracts/libraries/verifier/ISP1Verifier.sol +++ b/contracts/contracts/libraries/verifier/ISP1Verifier.sol @@ -16,4 +16,4 @@ interface ISP1Verifier { interface ISP1VerifierWithHash is ISP1Verifier { /// @notice Returns the hash of the verifier. function VERIFIER_HASH() external pure returns (bytes32); -} \ No newline at end of file +} diff --git a/contracts/contracts/libraries/verifier/SP1VerifierPlonk.sol b/contracts/contracts/libraries/verifier/SP1VerifierPlonk.sol index d63fb5cfe..7fd8f3ee2 100644 --- a/contracts/contracts/libraries/verifier/SP1VerifierPlonk.sol +++ b/contracts/contracts/libraries/verifier/SP1VerifierPlonk.sol @@ -23,9 +23,7 @@ contract SP1Verifier is PlonkVerifier, ISP1VerifierWithHash { /// @notice Hashes the public values to a field elements inside Bn254. /// @param publicValues The public values. - function hashPublicValues( - bytes calldata publicValues - ) public pure returns (bytes32) { + function hashPublicValues(bytes calldata publicValues) public pure returns (bytes32) { return sha256(publicValues) & bytes32(uint256((1 << 253) - 1)); } @@ -33,11 +31,7 @@ contract SP1Verifier is PlonkVerifier, ISP1VerifierWithHash { /// @param programVKey The verification key for the RISC-V program. /// @param publicValues The public values encoded as bytes. /// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes. - function verifyProof( - bytes32 programVKey, - bytes calldata publicValues, - bytes calldata proofBytes - ) external view { + function verifyProof(bytes32 programVKey, bytes calldata publicValues, bytes calldata proofBytes) external view { bytes4 receivedSelector = bytes4(proofBytes[:4]); bytes4 expectedSelector = bytes4(VERIFIER_HASH()); if (receivedSelector != expectedSelector) { @@ -53,4 +47,4 @@ contract SP1Verifier is PlonkVerifier, ISP1VerifierWithHash { revert InvalidProof(); } } -} \ No newline at end of file +} diff --git a/contracts/contracts/libraries/verifier/ZkEvmVerifierV1.sol b/contracts/contracts/libraries/verifier/ZkEvmVerifierV1.sol index 2bae6e303..52da6a8c0 100644 --- a/contracts/contracts/libraries/verifier/ZkEvmVerifierV1.sol +++ b/contracts/contracts/libraries/verifier/ZkEvmVerifierV1.sol @@ -7,7 +7,6 @@ import {SP1Verifier} from "./SP1VerifierPlonk.sol"; // solhint-disable no-inline-assembly contract ZkEvmVerifierV1 is IZkEvmVerifier, SP1Verifier { - /// @notice The verification key for the morph executor program. bytes32 public programVkey; diff --git a/contracts/contracts/lido/L1LidoGateway.sol b/contracts/contracts/lido/L1LidoGateway.sol index 444a01ff4..f39618612 100644 --- a/contracts/contracts/lido/L1LidoGateway.sol +++ b/contracts/contracts/lido/L1LidoGateway.sol @@ -128,7 +128,7 @@ contract L1LidoGateway is L1ERC20Gateway, LidoBridgeableTokens, LidoGatewayManag uint256 nonce = IL1CrossDomainMessenger(messenger).messageNonce(); - // 3. Send message to L1CrossDomainMessenger. + // 3. Send message to L1CrossDomainMessenger. IL1CrossDomainMessenger(messenger).sendMessage{value: msg.value}(counterpart, 0, _message, _gasLimit, _from); emit DepositERC20(_token, l2Token, _from, _to, _amount, _data, nonce); diff --git a/contracts/contracts/mock/BatchHeaderCodecTest.sol b/contracts/contracts/mock/BatchHeaderCodecTest.sol index 6bd6ea019..9b6206c8d 100644 --- a/contracts/contracts/mock/BatchHeaderCodecTest.sol +++ b/contracts/contracts/mock/BatchHeaderCodecTest.sol @@ -111,7 +111,6 @@ contract BatchHeaderCodecTest { BatchHeaderCodecV0.storeWithdrawRootHash(_batchPtr, data.withdrawRootHash); BatchHeaderCodecV0.storeSequencerSetVerifyHash(_batchPtr, data.sequencerSetVerifyHash); BatchHeaderCodecV0.storeParentBatchHash(_batchPtr, data.parentBatchHash); - BatchHeaderCodecV0.storeSkippedBitmap(_batchPtr, data.skipMap); - return BatchHeaderCodecV0.computeBatchHash(_batchPtr, BatchHeaderCodecV0.BATCH_HEADER_FIXED_LENGTH); + return BatchHeaderCodecV0.computeBatchHash(_batchPtr, BatchHeaderCodecV0.BATCH_HEADER_LENGTH); } } diff --git a/contracts/contracts/test/L1CrossDomainMessenger.t.sol b/contracts/contracts/test/L1CrossDomainMessenger.t.sol index a3de0826c..47af5645e 100644 --- a/contracts/contracts/test/L1CrossDomainMessenger.t.sol +++ b/contracts/contracts/test/L1CrossDomainMessenger.t.sol @@ -451,9 +451,9 @@ contract L1CrossDomainMessengerTest is L1GatewayBaseTest { l1ETHGateway.depositETHAndCall{value: amount}(recipient, amount, dataToCall, defaultGasLimit); - // skip message 0 + // pop message 0 hevm.startPrank(address(rollup)); - l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1, 0x1); + l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1); assertEq(l1MessageQueueWithGasPriceOracle.pendingQueueIndex(), 1); hevm.stopPrank(); @@ -473,9 +473,9 @@ contract L1CrossDomainMessengerTest is L1GatewayBaseTest { l1ETHGateway.depositETHAndCall{value: amount}(recipient, amount, dataToCall, defaultGasLimit); - // skip message 0 + // pop message 0 hevm.startPrank(address(rollup)); - l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1, 0x1); + l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1); assertEq(l1MessageQueueWithGasPriceOracle.pendingQueueIndex(), 1); hevm.stopPrank(); diff --git a/contracts/contracts/test/L1CustomERC20Gateway.t.sol b/contracts/contracts/test/L1CustomERC20Gateway.t.sol index 1ac3f5742..8ac88ce0c 100644 --- a/contracts/contracts/test/L1CustomERC20Gateway.t.sol +++ b/contracts/contracts/test/L1CustomERC20Gateway.t.sol @@ -192,9 +192,9 @@ contract L1CustomERC20GatewayTest is L1GatewayBaseTest { ); gateway.depositERC20AndCall(address(l1Token), recipient, amount, dataToCall, defaultGasLimit); - // skip message 0 + // pop message 0 hevm.startPrank(address(rollup)); - l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1, 0x1); + l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1); assertEq(l1MessageQueueWithGasPriceOracle.pendingQueueIndex(), 1); hevm.stopPrank(); diff --git a/contracts/contracts/test/L1ERC1155Gateway.t.sol b/contracts/contracts/test/L1ERC1155Gateway.t.sol index 7d383d388..b81e92702 100644 --- a/contracts/contracts/test/L1ERC1155Gateway.t.sol +++ b/contracts/contracts/test/L1ERC1155Gateway.t.sol @@ -168,9 +168,9 @@ contract L1ERC1155GatewayTest is L1GatewayBaseTest, ERC1155TokenReceiver { ); gateway.depositERC1155(address(l1Token), tokenId, amount, defaultGasLimit); - // skip message 0 + // pop message 0 hevm.startPrank(address(rollup)); - l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1, 0x1); + l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1); assertEq(l1MessageQueueWithGasPriceOracle.pendingQueueIndex(), 1); hevm.stopPrank(); @@ -201,9 +201,9 @@ contract L1ERC1155GatewayTest is L1GatewayBaseTest, ERC1155TokenReceiver { ); gateway.batchDepositERC1155(address(l1Token), _tokenIds, _amounts, defaultGasLimit); - // skip message 0 + // pop message 0 hevm.startPrank(address(rollup)); - l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1, 0x1); + l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1); assertEq(l1MessageQueueWithGasPriceOracle.pendingQueueIndex(), 1); hevm.stopPrank(); diff --git a/contracts/contracts/test/L1ERC721Gateway.t.sol b/contracts/contracts/test/L1ERC721Gateway.t.sol index a6ba3b694..17db63c8c 100644 --- a/contracts/contracts/test/L1ERC721Gateway.t.sol +++ b/contracts/contracts/test/L1ERC721Gateway.t.sol @@ -184,9 +184,9 @@ contract L1ERC721GatewayTest is L1GatewayBaseTest, ERC721TokenReceiver { ); gateway.depositERC721(address(l1Token), tokenId, defaultGasLimit); - // skip message 0 + // pop message 0 hevm.startPrank(address(rollup)); - l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1, 0x1); + l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1); assertEq(l1MessageQueueWithGasPriceOracle.pendingQueueIndex(), 1); hevm.stopPrank(); @@ -214,9 +214,9 @@ contract L1ERC721GatewayTest is L1GatewayBaseTest, ERC721TokenReceiver { ); gateway.batchDepositERC721(address(l1Token), _tokenIds, defaultGasLimit); - // skip message 0 + // pop message 0 hevm.startPrank(address(rollup)); - l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1, 0x1); + l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1); assertEq(l1MessageQueueWithGasPriceOracle.pendingQueueIndex(), 1); hevm.stopPrank(); diff --git a/contracts/contracts/test/L1ETHGateway.t.sol b/contracts/contracts/test/L1ETHGateway.t.sol index c5d0caf44..488e2777c 100644 --- a/contracts/contracts/test/L1ETHGateway.t.sol +++ b/contracts/contracts/test/L1ETHGateway.t.sol @@ -175,9 +175,9 @@ contract L1ETHGatewayTest is L1GatewayBaseTest { ); l1ETHGateway.depositETHAndCall{value: amount}(recipient, amount, dataToCall, defaultGasLimit); - // skip message 0 + // pop message 0 hevm.startPrank(address(rollup)); - l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1, 0x1); + l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1); assertEq(l1MessageQueueWithGasPriceOracle.pendingQueueIndex(), 1); hevm.stopPrank(); diff --git a/contracts/contracts/test/L1MessageQueue.t.sol b/contracts/contracts/test/L1MessageQueue.t.sol index 3e027e96e..2620f2e65 100644 --- a/contracts/contracts/test/L1MessageQueue.t.sol +++ b/contracts/contracts/test/L1MessageQueue.t.sol @@ -215,7 +215,7 @@ contract L1MessageQueueTest is L1MessageBaseTest { l1MessageQueue.appendCrossDomainMessage(alice, gasLimit, _calldata); hevm.prank(bob); hevm.expectRevert("Only callable by the rollup"); - l1MessageQueue.popCrossDomainMessage(0, 1, 0x3ff); + l1MessageQueue.popCrossDomainMessage(0, 1); } function test_popCrossDomainMessage_tooManyMessages_reverts() external { @@ -225,7 +225,7 @@ contract L1MessageQueueTest is L1MessageBaseTest { // Expect revert when _count > 256. hevm.prank(alice); hevm.expectRevert("pop too many messages"); - l1MessageQueue.popCrossDomainMessage(0, 257, 0x3ff); + l1MessageQueue.popCrossDomainMessage(0, 257); } function test_popCrossDomainMessage_startIndexMismatch_reverts() external { @@ -235,7 +235,7 @@ contract L1MessageQueueTest is L1MessageBaseTest { // Expect revert when pendingQueueIndex != _startIndex. hevm.prank(alice); hevm.expectRevert("start index mismatch"); - l1MessageQueue.popCrossDomainMessage(1, 2, 0x3ff); + l1MessageQueue.popCrossDomainMessage(1, 2); } function test_dropCrossDomainMessage_cannotDropPending_reverts() external { @@ -268,13 +268,11 @@ contract L1MessageQueueTest is L1MessageBaseTest { // Verify the event QueueTransaction is emitted successfully. hevm.expectEmit(false, false, false, true); - emit IL1MessageQueue.DequeueTransaction(0, 10, 0x3ff); + emit IL1MessageQueue.DequeueTransaction(0, 10); // pop all 10 message - l1MessageQueue.popCrossDomainMessage(0, 10, 0x3ff); - for (uint64 i = 0; i < 10; i++) { - assertTrue(l1MessageQueue.isMessageSkipped(i)); - } + l1MessageQueue.popCrossDomainMessage(0, 10); + // drop all 10 message for (uint64 i = 0; i < 10; i++) { l1MessageQueue.dropCrossDomainMessage(i); @@ -297,10 +295,8 @@ contract L1MessageQueueTest is L1MessageBaseTest { } // pop all 10 message - l1MessageQueue.popCrossDomainMessage(0, 10, 0x3ff); - for (uint64 i = 0; i < 10; i++) { - assertTrue(l1MessageQueue.isMessageSkipped(i)); - } + l1MessageQueue.popCrossDomainMessage(0, 10); + // drop all 10 message for (uint64 i = 0; i < 10; i++) { l1MessageQueue.dropCrossDomainMessage(i); diff --git a/contracts/contracts/test/L1StandardERC20Gateway.t.sol b/contracts/contracts/test/L1StandardERC20Gateway.t.sol index 86883d53b..00bbe5e65 100644 --- a/contracts/contracts/test/L1StandardERC20Gateway.t.sol +++ b/contracts/contracts/test/L1StandardERC20Gateway.t.sol @@ -306,9 +306,9 @@ contract L1StandardERC20GatewayTest is L1GatewayBaseTest { l1StandardERC20Gateway.depositERC20AndCall(address(l1Token), recipient, amount, dataToCall, defaultGasLimit); l1StandardERC20Gateway.depositERC20AndCall(address(l1Token), recipient, amount, dataToCall, defaultGasLimit); - // skip message 0 and 1 + // pop message 0 and 1 hevm.startPrank(address(rollup)); - l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 2, 0x3); + l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 2); assertEq(l1MessageQueueWithGasPriceOracle.pendingQueueIndex(), 2); hevm.stopPrank(); diff --git a/contracts/contracts/test/L1WETHGateway.t.sol b/contracts/contracts/test/L1WETHGateway.t.sol index bc0bf6813..f4de6bac1 100644 --- a/contracts/contracts/test/L1WETHGateway.t.sol +++ b/contracts/contracts/test/L1WETHGateway.t.sol @@ -207,7 +207,7 @@ contract L1WETHGatewayTest is L1GatewayBaseTest { // skip message 0 hevm.startPrank(address(rollup)); - l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1, 0x1); + l1MessageQueueWithGasPriceOracle.popCrossDomainMessage(0, 1); assertEq(l1MessageQueueWithGasPriceOracle.pendingQueueIndex(), 1); hevm.stopPrank(); diff --git a/contracts/contracts/test/L2CustomERC20Gateway.t.sol b/contracts/contracts/test/L2CustomERC20Gateway.t.sol index c5cf4b211..0edf44cbc 100644 --- a/contracts/contracts/test/L2CustomERC20Gateway.t.sol +++ b/contracts/contracts/test/L2CustomERC20Gateway.t.sol @@ -66,7 +66,7 @@ contract L2CustomERC20GatewayTest is L2GatewayBaseTest { ); // Deploy a new L2CustomERC20Gateway contract. L2CustomERC20Gateway l2CustomERC20GatewayImplTemp = new L2CustomERC20Gateway(); - + // Expect revert due to zero router address. hevm.expectRevert("zero router address"); ITransparentUpgradeableProxy(address(l2CustomERC20GatewayProxyTemp)).upgradeToAndCall( @@ -80,7 +80,7 @@ contract L2CustomERC20GatewayTest is L2GatewayBaseTest { ) ) ); - + // Expect revert due to zero counterpart address. hevm.expectRevert("zero counterpart address"); ITransparentUpgradeableProxy(address(l2CustomERC20GatewayProxyTemp)).upgradeToAndCall( @@ -134,7 +134,7 @@ contract L2CustomERC20GatewayTest is L2GatewayBaseTest { // Cast the proxy contract address to the L2CustomERC20Gateway contract type to call its methods. L2CustomERC20Gateway l2CustomERC20GatewayTemp = L2CustomERC20Gateway((address(l2CustomERC20GatewayProxyTemp))); hevm.stopPrank(); - + // Verify the counterpart, router and messenger are initialized successfully. assertEq(l2CustomERC20GatewayTemp.counterpart(), address(NON_ZERO_ADDRESS)); assertEq(l2CustomERC20GatewayTemp.router(), address(l2GatewayRouter)); @@ -155,7 +155,7 @@ contract L2CustomERC20GatewayTest is L2GatewayBaseTest { function test_updateTokenMapping_succeeds(address token1, address token2) public { hevm.assume(token1 != address(0)); - + // Expect the UpdateTokenMapping event to be emitted successfully. hevm.expectEmit(true, true, true, true); emit L2CustomERC20Gateway.UpdateTokenMapping(token2, address(0), token1); diff --git a/contracts/contracts/test/L2ERC1155Gateway.t.sol b/contracts/contracts/test/L2ERC1155Gateway.t.sol index 1a6bae769..6757de9f5 100644 --- a/contracts/contracts/test/L2ERC1155Gateway.t.sol +++ b/contracts/contracts/test/L2ERC1155Gateway.t.sol @@ -70,7 +70,7 @@ contract L2ERC1155GatewayTest is L2GatewayBaseTest, ERC1155TokenReceiver { ) ) ); - + // Expect revert due to zero messenger address. hevm.expectRevert("zero messenger address"); ITransparentUpgradeableProxy(address(l2ERC1155GatewayProxy)).upgradeToAndCall( @@ -109,7 +109,7 @@ contract L2ERC1155GatewayTest is L2GatewayBaseTest, ERC1155TokenReceiver { // Cast the proxy contract address to the L2ERC1155Gateway contract type to call its methods. L2ERC1155Gateway l2ERC1155GatewayTemp = L2ERC1155Gateway(address(l2ERC1155GatewayProxyTemp)); hevm.stopPrank(); - + // Verify the counterpart and messenger are initialized successfully. assertEq(l2ERC1155GatewayTemp.counterpart(), address(NON_ZERO_ADDRESS)); assertEq(l2ERC1155GatewayTemp.messenger(), address(l2CrossDomainMessenger)); @@ -166,7 +166,14 @@ contract L2ERC1155GatewayTest is L2GatewayBaseTest, ERC1155TokenReceiver { // Expect WithdrawERC1155 event to be emitted. hevm.expectEmit(true, true, true, true); - emit IL2ERC1155Gateway.WithdrawERC1155(address(token), address(token), address(this), address(this), tokenId, amount); + emit IL2ERC1155Gateway.WithdrawERC1155( + address(token), + address(token), + address(this), + address(this), + tokenId, + amount + ); gateway.withdrawERC1155(address(token), tokenId, amount, 0); assertEq(token.balanceOf(address(gateway), tokenId), 0); @@ -240,7 +247,14 @@ contract L2ERC1155GatewayTest is L2GatewayBaseTest, ERC1155TokenReceiver { // Expect BatchWithdrawERC1155 event to be emitted. hevm.expectEmit(true, true, true, true); - emit IL2ERC1155Gateway.BatchWithdrawERC1155(address(token), address(token), address(this), address(this), _tokenIds, _amounts); + emit IL2ERC1155Gateway.BatchWithdrawERC1155( + address(token), + address(token), + address(this), + address(this), + _tokenIds, + _amounts + ); gateway.batchWithdrawERC1155(address(token), _tokenIds, _amounts, 0); for (uint256 i = 0; i < count; i++) { @@ -264,7 +278,14 @@ contract L2ERC1155GatewayTest is L2GatewayBaseTest, ERC1155TokenReceiver { // Expect BatchWithdrawERC1155 event to be emitted. hevm.expectEmit(true, true, true, true); - emit IL2ERC1155Gateway.BatchWithdrawERC1155(address(token), address(token), address(this), to, _tokenIds, _amounts); + emit IL2ERC1155Gateway.BatchWithdrawERC1155( + address(token), + address(token), + address(this), + to, + _tokenIds, + _amounts + ); gateway.batchWithdrawERC1155(address(token), to, _tokenIds, _amounts, 0); for (uint256 i = 0; i < count; i++) { @@ -386,7 +407,14 @@ contract L2ERC1155GatewayTest is L2GatewayBaseTest, ERC1155TokenReceiver { // Expect the FinalizeDepositERC1155 event can be emitted successfully. hevm.expectEmit(true, true, true, true); - emit IL2ERC1155Gateway.FinalizeBatchDepositERC1155(address(token), address(token), from, to, _tokenIds, _amounts); + emit IL2ERC1155Gateway.FinalizeBatchDepositERC1155( + address(token), + address(token), + from, + to, + _tokenIds, + _amounts + ); messenger.callTarget( address(gateway), diff --git a/contracts/contracts/test/L2ERC721Gateway.t.sol b/contracts/contracts/test/L2ERC721Gateway.t.sol index 74aebe1bc..44ec84c3a 100644 --- a/contracts/contracts/test/L2ERC721Gateway.t.sol +++ b/contracts/contracts/test/L2ERC721Gateway.t.sol @@ -70,7 +70,7 @@ contract L2ERC721GatewayTest is L2GatewayBaseTest { ) ) ); - + // Expect revert due to zero messenger address. hevm.expectRevert("zero messenger address"); ITransparentUpgradeableProxy(address(l2ERC721GatewayProxy)).upgradeToAndCall( @@ -109,7 +109,7 @@ contract L2ERC721GatewayTest is L2GatewayBaseTest { // Cast the proxy contract address to the L2ERC721Gateway contract type to call its methods. L2ERC721Gateway l2ERC721GatewayTemp = L2ERC721Gateway(address(l2ERC721GatewayProxyTemp)); hevm.stopPrank(); - + // Verify the counterpart and messenger are initialized successfully. assertEq(l2ERC721GatewayTemp.counterpart(), address(NON_ZERO_ADDRESS)); assertEq(l2ERC721GatewayTemp.messenger(), address(l2CrossDomainMessenger)); @@ -231,7 +231,13 @@ contract L2ERC721GatewayTest is L2GatewayBaseTest { // Expect BatchWithdrawERC721 event to be emitted. hevm.expectEmit(true, true, true, true); - emit IL2ERC721Gateway.BatchWithdrawERC721(address(token), address(token), address(this), address(this), _tokenIds); + emit IL2ERC721Gateway.BatchWithdrawERC721( + address(token), + address(token), + address(this), + address(this), + _tokenIds + ); gateway.batchWithdrawERC721(address(token), _tokenIds, 0); for (uint256 i = 0; i < count; i++) { diff --git a/contracts/contracts/test/L2GatewayRouter.t.sol b/contracts/contracts/test/L2GatewayRouter.t.sol index 5a4b6076b..5d8ca28c8 100644 --- a/contracts/contracts/test/L2GatewayRouter.t.sol +++ b/contracts/contracts/test/L2GatewayRouter.t.sol @@ -48,20 +48,16 @@ contract L2GatewayRouterTest is L2GatewayBaseTest { hevm.startPrank(multisig); // Deploy a proxy contract for the L2GatewayRouter. TransparentUpgradeableProxy l2GatewayRouterProxyTempA = new TransparentUpgradeableProxy( - address(emptyContract), - address(multisig), - new bytes(0) + address(emptyContract), + address(multisig), + new bytes(0) ); // Deploy a new L2GatewayRouter contract. L2GatewayRouter l2GatewayRouterImplTempA = new L2GatewayRouter(); // Initialize the proxy with the new implementation. - ITransparentUpgradeableProxy(address(l2GatewayRouterProxyTempA)) - .upgradeToAndCall( - address(l2GatewayRouterImplTempA), - abi.encodeCall( - L2GatewayRouter.initialize, - (address(0), address(0)) - ) + ITransparentUpgradeableProxy(address(l2GatewayRouterProxyTempA)).upgradeToAndCall( + address(l2GatewayRouterImplTempA), + abi.encodeCall(L2GatewayRouter.initialize, (address(0), address(0))) ); // Cast the proxy address to the L2GatewayRouter contract type to call its methods. L2GatewayRouter l2GatewayRouterTempA = L2GatewayRouter(address(l2GatewayRouterProxyTempA)); @@ -72,33 +68,29 @@ contract L2GatewayRouterTest is L2GatewayBaseTest { hevm.startPrank(multisig); // Deploy another proxy contract for the L2GatewayRouter. TransparentUpgradeableProxy l2GatewayRouterProxyTempB = new TransparentUpgradeableProxy( - address(emptyContract), - address(multisig), - new bytes(0) + address(emptyContract), + address(multisig), + new bytes(0) ); // Deploy a new L2GatewayRouter contract. L2GatewayRouter l2GatewayRouterImplTempB = new L2GatewayRouter(); - + // Expect the SetDefaultERC20Gateway event to be emitted successfully. hevm.expectEmit(true, true, false, true); emit IL2GatewayRouter.SetDefaultERC20Gateway(address(0), address(2)); - + // Expect the SetETHGateway event to be emitted successfully. hevm.expectEmit(true, true, false, true); emit IL2GatewayRouter.SetETHGateway(address(0), address(1)); // Initialize the proxy with the new implementation. - ITransparentUpgradeableProxy(address(l2GatewayRouterProxyTempB)) - .upgradeToAndCall( - address(l2GatewayRouterImplTempB), - abi.encodeCall( - L2GatewayRouter.initialize, - (address(1), address(2)) - ) + ITransparentUpgradeableProxy(address(l2GatewayRouterProxyTempB)).upgradeToAndCall( + address(l2GatewayRouterImplTempB), + abi.encodeCall(L2GatewayRouter.initialize, (address(1), address(2))) ); // Cast the proxy address to the L2GatewayRouter contract type to call its methods. L2GatewayRouter l2GatewayRouterTempB = L2GatewayRouter(address(l2GatewayRouterProxyTempB)); hevm.stopPrank(); - + // Verify that the ethGateway and defaultERC20Gateway are initialized correctly. assertEq(l2GatewayRouterTempB.ethGateway(), address(1)); assertEq(l2GatewayRouterTempB.defaultERC20Gateway(), address(2)); diff --git a/contracts/contracts/test/Rollup.t.sol b/contracts/contracts/test/Rollup.t.sol index 05a9c46ed..8f093c673 100644 --- a/contracts/contracts/test/Rollup.t.sol +++ b/contracts/contracts/test/Rollup.t.sol @@ -56,7 +56,6 @@ contract RollupCommitBatchTest is L1MessageBaseTest { rollup.importGenesisBatch(batchHeader0); bytes32 batchHash0 = rollup.committedBatches(0); - bytes memory bitmap; bytes memory batch; // commit batch1, one batch with one block, 1 tx, 1 L1 message, no skip @@ -76,7 +75,7 @@ contract RollupCommitBatchTest is L1MessageBaseTest { // f1f58308e98844ec99e2990d88bfb36e1a30f0e6591e62af90ae6f8498a1b067 // => hash for parent batch header // 00847173b29b238cf319cde79512b7c213e5a8b4138daa7051914c4592b6dfc7 - bytes memory batchHeader1 = new bytes(249 + 32); + bytes memory batchHeader1 = new bytes(249); assembly { mstore(add(batchHeader1, 0x20), 0) // version mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex = 1 @@ -92,7 +91,6 @@ contract RollupCommitBatchTest is L1MessageBaseTest { 0xf1f58308e98844ec99e2990d88bfb36e1a30f0e6591e62af90ae6f8498a1b067 ) // sequencerSetVerifyHash mstore(add(batchHeader1, add(0x20, 217)), batchHash0) // parentBatchHash - mstore(add(batchHeader1, add(0x20, 249)), 0) // bitmap0 } batch = new bytes(2 + 60); assembly { @@ -100,7 +98,6 @@ contract RollupCommitBatchTest is L1MessageBaseTest { mstore(add(batch, add(0x22, 56)), shl(240, 1)) // numTransactions = 1 mstore(add(batch, add(0x22, 58)), shl(240, 1)) // numL1Messages = 1 } - bitmap = new bytes(32); hevm.mockCall( address(rollup.l1StakingContract()), abi.encodeCall(IL1Staking.isActiveStaker, (address(0))), @@ -113,14 +110,14 @@ contract RollupCommitBatchTest is L1MessageBaseTest { ); hevm.startPrank(address(0)); hevm.expectEmit(true, true, false, true); - emit IRollup.CommitBatch(1, bytes32(0x135ab7153517794b38566492dee2a60426285da9764f8ad07da93cf7dd560a59)); - batchDataInput = IRollup.BatchDataInput(0, batchHeader0, batch, bitmap, bytesData1, bytesData1, bytesData3); + emit IRollup.CommitBatch(1, bytes32(0x7764891041982c1f3abd964616bf5c777e752e327779f980a0881ef2bc994324)); + batchDataInput = IRollup.BatchDataInput(0, batchHeader0, batch, bytesData1, bytesData1, bytesData3); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); assertFalse(rollup.isBatchFinalized(1)); bytes32 batchHash1 = rollup.committedBatches(1); - assertEq(batchHash1, bytes32(0x135ab7153517794b38566492dee2a60426285da9764f8ad07da93cf7dd560a59)); + assertEq(batchHash1, bytes32(0x7764891041982c1f3abd964616bf5c777e752e327779f980a0881ef2bc994324)); bytes32 stateRoot1 = rollup.committedStateRoots(1); assertEq(stateRoot1, bytesData1); @@ -132,7 +129,6 @@ contract RollupCommitBatchTest is L1MessageBaseTest { assertEq(rollup.finalizedStateRoots(1), bytesData1); assertTrue(rollup.withdrawalRoots(bytes32(uint256(3)))); assertEq(rollup.lastFinalizedBatchIndex(), 1); - assertFalse(l1MessageQueueWithGasPriceOracle.isMessageSkipped(0)); assertEq(l1MessageQueueWithGasPriceOracle.pendingQueueIndex(), 1); // check deleted values assertFalse(rollup.batchExist(0)); @@ -143,13 +139,13 @@ contract RollupCommitBatchTest is L1MessageBaseTest { // 2. block1 has 5 tx, 3 L1 messages, no skips // 3. block2 has 10 tx, 5 L1 messages, even is skipped, last is not skipped // 4. block3 has 300 tx, 256 L1 messages, odd position is skipped, last is not skipped - bytes memory batchHeader2 = new bytes(249 + 32 + 32); + bytes memory batchHeader2 = new bytes(249); assembly { mstore(add(batchHeader2, 0x20), 0) // version mstore(add(batchHeader2, add(0x20, 1)), shl(192, 2)) // batchIndex = 2 mstore(add(batchHeader2, add(0x20, 9)), shl(192, 264)) // l1MessagePopped = 264 mstore(add(batchHeader2, add(0x20, 17)), shl(192, 265)) // totalL1MessagePopped = 265 - mstore(add(batchHeader2, add(0x20, 25)), 0xc67045fcf768071021f5acec08a921553fdae4c33a675d38e4c4a25589c91120) // dataHash + mstore(add(batchHeader2, add(0x20, 25)), 0x81e7e4ffa69f7496f9377a1e4140fbb16fcc81d8086b44a1316fc77cc2b9a63b) // dataHash mstore(add(batchHeader2, add(0x20, 57)), 0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014) // l2 tx blob versioned hash mstore(add(batchHeader2, add(0x20, 89)), bytesData1) // prevStateHash mstore(add(batchHeader2, add(0x20, 121)), bytesData1) // postStateHash @@ -159,11 +155,6 @@ contract RollupCommitBatchTest is L1MessageBaseTest { 0xf1f58308e98844ec99e2990d88bfb36e1a30f0e6591e62af90ae6f8498a1b067 ) // sequencerSetVerifyHash mstore(add(batchHeader2, add(0x20, 217)), batchHash1) // parentBatchHash - mstore( - add(batchHeader2, add(0x20, 249)), - 77194726158210796949047323339125271902179989777093709359638389338608753093160 - ) // bitmap0 - mstore(add(batchHeader2, add(0x20, 281)), 42) // bitmap1 } batch = new bytes(2 + 60 * 4); assembly { @@ -178,15 +169,6 @@ contract RollupCommitBatchTest is L1MessageBaseTest { mstore(add(batch, add(214, 58)), shl(240, 256)) // block3.numL1Messages = 256 } - bitmap = new bytes(64); - assembly { - mstore( - add(bitmap, add(0x20, 0)), - 77194726158210796949047323339125271902179989777093709359638389338608753093160 - ) // bitmap0 - mstore(add(bitmap, add(0x20, 32)), 42) // bitmap1 - } - hevm.prank(multisig); hevm.mockCall( address(rollup.l1StakingContract()), @@ -200,15 +182,15 @@ contract RollupCommitBatchTest is L1MessageBaseTest { ); hevm.startPrank(address(0)); hevm.expectEmit(true, true, false, true); - emit IRollup.CommitBatch(2, bytes32(0x71259c7573b1db248381cef917270058e2ca20620c6eae975a1aa76b9858392a)); + emit IRollup.CommitBatch(2, bytes32(0x0389812d59b1230ba183f27cbe53955d98a1bce20512048a9b9e062b71403c94)); - batchDataInput = IRollup.BatchDataInput(0, batchHeader1, batch, bitmap, bytesData1, bytesData1, bytesData4); + batchDataInput = IRollup.BatchDataInput(0, batchHeader1, batch, bytesData1, bytesData1, bytesData4); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); assertFalse(rollup.isBatchFinalized(2)); bytes32 batchHash2 = rollup.committedBatches(2); - assertEq(batchHash2, bytes32(0x71259c7573b1db248381cef917270058e2ca20620c6eae975a1aa76b9858392a)); + assertEq(batchHash2, bytes32(0x0389812d59b1230ba183f27cbe53955d98a1bce20512048a9b9e062b71403c94)); bytes32 stateRoot2 = rollup.committedStateRoots(2); assertEq(stateRoot2, bytesData1); @@ -227,27 +209,6 @@ contract RollupCommitBatchTest is L1MessageBaseTest { // check deleted values assertFalse(rollup.batchExist(1)); assertEq(rollup.committedStateRoots(1), 0); - - // 1 ~ 4, zero - for (uint256 i = 1; i < 4; i++) { - assertFalse(l1MessageQueueWithGasPriceOracle.isMessageSkipped(i)); - } - // 4 ~ 9, even is nonzero, odd is zero - for (uint256 i = 4; i < 9; i++) { - if (i % 2 == 1 || i == 8) { - assertFalse(l1MessageQueueWithGasPriceOracle.isMessageSkipped(i)); - } else { - assertTrue(l1MessageQueueWithGasPriceOracle.isMessageSkipped(i)); - } - } - // 9 ~ 265, even is nonzero, odd is zero - for (uint256 i = 9; i < 265; i++) { - if (i % 2 == 1 || i == 264) { - assertFalse(l1MessageQueueWithGasPriceOracle.isMessageSkipped(i)); - } else { - assertTrue(l1MessageQueueWithGasPriceOracle.isMessageSkipped(i)); - } - } } } @@ -309,60 +270,28 @@ contract RollupTest is L1MessageBaseTest { // only active staker allowed, revert hevm.startPrank(address(0)); hevm.expectRevert("only active staker allowed"); - batchDataInput = IRollup.BatchDataInput( - 0, - batchHeader0, - new bytes(0), - new bytes(0), - stateRoot, - stateRoot, - getTreeRoot() - ); + batchDataInput = IRollup.BatchDataInput(0, batchHeader0, new bytes(0), stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); // invalid version, revert hevm.startPrank(alice); hevm.expectRevert("invalid version"); - batchDataInput = IRollup.BatchDataInput( - 1, - batchHeader0, - new bytes(0), - new bytes(0), - stateRoot, - stateRoot, - getTreeRoot() - ); + batchDataInput = IRollup.BatchDataInput(1, batchHeader0, new bytes(0), stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); // batch is empty, revert hevm.startPrank(alice); hevm.expectRevert("batch is empty"); - batchDataInput = IRollup.BatchDataInput( - 0, - batchHeader0, - new bytes(0), - new bytes(0), - stateRoot, - stateRoot, - getTreeRoot() - ); + batchDataInput = IRollup.BatchDataInput(0, batchHeader0, new bytes(0), stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); - // batch header length too small, revert + // batch header length incorrect, revert hevm.startPrank(alice); hevm.expectRevert("batch header length too small"); - batchDataInput = IRollup.BatchDataInput( - 0, - new bytes(120), - new bytes(1), - new bytes(0), - stateRoot, - stateRoot, - getTreeRoot() - ); + batchDataInput = IRollup.BatchDataInput(0, new bytes(120), new bytes(1), stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); @@ -372,15 +301,7 @@ contract RollupTest is L1MessageBaseTest { } hevm.startPrank(alice); hevm.expectRevert("incorrect batch index"); - batchDataInput = IRollup.BatchDataInput( - 0, - batchHeader0, - new bytes(1), - new bytes(0), - stateRoot, - stateRoot, - getTreeRoot() - ); + batchDataInput = IRollup.BatchDataInput(0, batchHeader0, new bytes(1), stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); assembly { @@ -393,15 +314,7 @@ contract RollupTest is L1MessageBaseTest { } hevm.startPrank(alice); hevm.expectRevert("incorrect parent batch hash"); - batchDataInput = IRollup.BatchDataInput( - 0, - batchHeader0, - new bytes(1), - new bytes(0), - stateRoot, - stateRoot, - getTreeRoot() - ); + batchDataInput = IRollup.BatchDataInput(0, batchHeader0, new bytes(1), stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); assembly { @@ -416,7 +329,6 @@ contract RollupTest is L1MessageBaseTest { 0, batchHeader0, new bytes(1), - new bytes(0), bytes32(uint256(2)), stateRoot, getTreeRoot() @@ -424,18 +336,10 @@ contract RollupTest is L1MessageBaseTest { rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); - // wrong bitmap length, revert + // incorrect batch header length, revert hevm.startPrank(alice); - hevm.expectRevert("wrong bitmap length"); - batchDataInput = IRollup.BatchDataInput( - 0, - new bytes(250), - new bytes(1), - new bytes(0), - stateRoot, - stateRoot, - getTreeRoot() - ); + hevm.expectRevert("batch header length too small"); + batchDataInput = IRollup.BatchDataInput(0, new bytes(248), new bytes(1), stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); @@ -443,15 +347,7 @@ contract RollupTest is L1MessageBaseTest { bytes memory batch = new bytes(2); hevm.startPrank(alice); hevm.expectRevert(BatchCodecV0.ErrorNoBlockInBatch.selector); - batchDataInput = IRollup.BatchDataInput( - 0, - batchHeader0, - batch, - new bytes(0), - stateRoot, - stateRoot, - getTreeRoot() - ); + batchDataInput = IRollup.BatchDataInput(0, batchHeader0, batch, stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); @@ -460,41 +356,18 @@ contract RollupTest is L1MessageBaseTest { batch[1] = bytes1(uint8(1)); // one block in this batch hevm.startPrank(alice); hevm.expectRevert(BatchCodecV0.ErrorIncorrectBatchLength.selector); - batchDataInput = IRollup.BatchDataInput( - 0, - batchHeader0, - batch, - new bytes(0), - stateRoot, - stateRoot, - getTreeRoot() - ); - rollup.commitBatch(batchDataInput, batchSignatureInput); - hevm.stopPrank(); - - // cannot skip last L1 message, revert - batch = new bytes(2 + 60); - bytes memory bitmap = new bytes(32); - batch[1] = bytes1(uint8(1)); // one block in this batch - batch[59] = bytes1(uint8(1)); // numTransactions = 1 - batch[61] = bytes1(uint8(1)); // numL1Messages = 1 - bitmap[31] = bytes1(uint8(1)); - hevm.startPrank(alice); - hevm.expectRevert("cannot skip last L1 message"); - batchDataInput = IRollup.BatchDataInput(0, batchHeader0, batch, bitmap, stateRoot, stateRoot, getTreeRoot()); + batchDataInput = IRollup.BatchDataInput(0, batchHeader0, batch, stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); // num txs less than num L1 msgs, revert batch = new bytes(2 + 60); - bitmap = new bytes(32); batch[1] = bytes1(uint8(1)); // one block in this batch batch[59] = bytes1(uint8(1)); // numTransactions = 1 batch[61] = bytes1(uint8(3)); // numL1Messages = 3 - bitmap[31] = bytes1(uint8(3)); hevm.startPrank(alice); hevm.expectRevert("num txs less than num L1 msgs"); - batchDataInput = IRollup.BatchDataInput(0, batchHeader0, batch, bitmap, stateRoot, stateRoot, getTreeRoot()); + batchDataInput = IRollup.BatchDataInput(0, batchHeader0, batch, stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); @@ -503,15 +376,7 @@ contract RollupTest is L1MessageBaseTest { batch[1] = bytes1(uint8(1)); // one block in this batch hevm.startPrank(alice); hevm.expectRevert(BatchCodecV0.ErrorIncorrectBatchLength.selector); - batchDataInput = IRollup.BatchDataInput( - 0, - batchHeader0, - batch, - new bytes(0), - stateRoot, - stateRoot, - getTreeRoot() - ); + batchDataInput = IRollup.BatchDataInput(0, batchHeader0, batch, stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); @@ -519,15 +384,7 @@ contract RollupTest is L1MessageBaseTest { batch = new bytes(2 + 60); batch[1] = bytes1(uint8(1)); // one block in this batch hevm.startPrank(alice); - batchDataInput = IRollup.BatchDataInput( - 0, - batchHeader0, - batch, - new bytes(0), - stateRoot, - stateRoot, - getTreeRoot() - ); + batchDataInput = IRollup.BatchDataInput(0, batchHeader0, batch, stateRoot, stateRoot, getTreeRoot()); hevm.deal(address(0), 10 ether); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); @@ -536,15 +393,7 @@ contract RollupTest is L1MessageBaseTest { // batch is already committed, revert hevm.startPrank(alice); hevm.expectRevert("batch already committed"); - batchDataInput = IRollup.BatchDataInput( - 0, - batchHeader0, - batch, - new bytes(0), - stateRoot, - stateRoot, - getTreeRoot() - ); + batchDataInput = IRollup.BatchDataInput(0, batchHeader0, batch, stateRoot, stateRoot, getTreeRoot()); rollup.commitBatch(batchDataInput, batchSignatureInput); hevm.stopPrank(); } @@ -574,15 +423,7 @@ contract RollupTest is L1MessageBaseTest { bytes memory batch = new bytes(2 + 60); batch[1] = bytes1(uint8(1)); // one block in this batch hevm.startPrank(alice); - batchDataInput = IRollup.BatchDataInput( - 0, - batchHeader0, - batch, - new bytes(0), - stateRoot, - stateRoot, - bytes32(uint256(4)) - ); + batchDataInput = IRollup.BatchDataInput(0, batchHeader0, batch, stateRoot, stateRoot, bytes32(uint256(4))); rollup.commitBatch(batchDataInput, batchSignatureInput); // first chunk with too many txs hevm.stopPrank(); assertEq(rollup.committedBatches(1), 0xb7cb76cf9e9f5878136c1d14e095f5d5b435fe8252cad6eb100e51110033b6ed); @@ -607,15 +448,7 @@ contract RollupTest is L1MessageBaseTest { // commit another batch hevm.startPrank(alice); - batchDataInput = IRollup.BatchDataInput( - 0, - batchHeader1, - batch, - new bytes(0), - stateRoot, - stateRoot, - bytes32(uint256(4)) - ); + batchDataInput = IRollup.BatchDataInput(0, batchHeader1, batch, stateRoot, stateRoot, bytes32(uint256(4))); rollup.commitBatch(batchDataInput, batchSignatureInput); // first chunk with too many txs hevm.stopPrank(); @@ -675,7 +508,6 @@ contract RollupTest is L1MessageBaseTest { 0, new bytes(0), new bytes(0), - new bytes(0), stateRoot, stateRoot, bytes32(uint256(4)) @@ -729,7 +561,7 @@ contract RollupTest is L1MessageBaseTest { hevm.prank(multisig); rollup.importGenesisBatch(batchHeader); - // batch header length too small, revert + // batch header length incorrect, revert batchHeader = new bytes(248); assembly { mstore(add(batchHeader, add(0x20, 121)), bytesData1) // stateRootHsash @@ -738,17 +570,8 @@ contract RollupTest is L1MessageBaseTest { hevm.prank(multisig); rollup.importGenesisBatch(batchHeader); - // wrong bitmap length, revert - batchHeader = new bytes(250); - assembly { - mstore(add(batchHeader, add(0x20, 121)), bytesData1) // stateRootHsash - } - hevm.expectRevert("wrong bitmap length"); - hevm.prank(multisig); - rollup.importGenesisBatch(batchHeader); - // not all fields are zero, revert - batchHeader = new bytes(249 + 32); + batchHeader = new bytes(249); assembly { mstore(add(batchHeader, add(0x20, 9)), shl(192, 1)) // l1MessagePopped not zero mstore(add(batchHeader, add(0x20, 121)), bytesData1) // stateRootHsash diff --git a/contracts/contracts/test/ZkEvmVerifierV1.t.sol b/contracts/contracts/test/ZkEvmVerifierV1.t.sol index 47f4be4dc..7891058e8 100644 --- a/contracts/contracts/test/ZkEvmVerifierV1.t.sol +++ b/contracts/contracts/test/ZkEvmVerifierV1.t.sol @@ -45,4 +45,4 @@ contract EvmTest is Test { fixture.proof[31] = 0x00; evm.verifyPlonk(fixture.proof, fixture.publicValues); } -} \ No newline at end of file +} diff --git a/contracts/contracts/test/base/BatchHeaderCodeV0.t.sol b/contracts/contracts/test/base/BatchHeaderCodeV0.t.sol index d7533aa8d..9ecabccdb 100644 --- a/contracts/contracts/test/base/BatchHeaderCodeV0.t.sol +++ b/contracts/contracts/test/base/BatchHeaderCodeV0.t.sol @@ -17,7 +17,7 @@ contract BatchHeaderCodeV0Test is DSTestPlus { } function test_btach_decode() public { - bytes memory batchHeader0 = new bytes(249 + 32); + bytes memory batchHeader0 = new bytes(249); assembly { mstore(add(batchHeader0, 0x20), shl(248, 1)) // version mstore(add(batchHeader0, add(0x20, 1)), shl(192, 1)) // batchIndex = 1 @@ -30,7 +30,6 @@ contract BatchHeaderCodeV0Test is DSTestPlus { mstore(add(batchHeader0, add(0x20, 153)), ZERO_VERSIONED_HASH) // withdrawRootHash mstore(add(batchHeader0, add(0x20, 185)), ZERO_VERSIONED_HASH) // sequencerSetVerifyHash mstore(add(batchHeader0, add(0x20, 217)), ZERO_VERSIONED_HASH) // parentBatchHash - mstore(add(batchHeader0, add(0x20, 249)), 0) // bitmap0 } uint256 version = codecTest.getVersion(batchHeader0); @@ -78,7 +77,6 @@ contract BatchHeaderCodeV0Test is DSTestPlus { add(batchHeader0, add(0x20, 217)), 0x5db199130d0c9334530358520a66d09c98c62325011a3665cf3efcc93e77623c ) // parentBatchHash - mstore(add(batchHeader0, add(0x20, 249)), 0) // bitmap0 } { uint256 version = codecTest.getVersion(batchHeader0); diff --git a/contracts/go.mod b/contracts/go.mod index 614343366..783504b76 100644 --- a/contracts/go.mod +++ b/contracts/go.mod @@ -6,7 +6,7 @@ replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3. require ( github.com/iden3/go-iden3-crypto v0.0.16 - github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 + github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e github.com/stretchr/testify v1.9.0 ) diff --git a/contracts/go.sum b/contracts/go.sum index 8f4a20fa4..71bfe5ece 100644 --- a/contracts/go.sum +++ b/contracts/go.sum @@ -25,8 +25,8 @@ 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= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 h1:4+cbRSS4lacSIC81RXxvA04UHhGVC4SHVn+bKeqhPSM= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e h1:pV7z8mnNQr+JJO2CGUzwAlzjrPnZ0YlO92izBaq00Zs= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/go-ethereum b/go-ethereum index 0ff2a10a9..5c7f1bb70 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 0ff2a10a9625e38b5d2189ad713d104192c1ae16 +Subproject commit 5c7f1bb7073ef2c88ea52d00e217b60d34ff221f diff --git a/go.work.sum b/go.work.sum index f675befb5..af83c40f3 100644 --- a/go.work.sum +++ b/go.work.sum @@ -761,6 +761,8 @@ github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/morph-l2/go-ethereum v0.5.0/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= github.com/morph-l2/go-ethereum v0.6.0/go.mod h1:Z8nCRf+BHV5GwFKpVamy6yur7LrKkzqaPfQcwYnq0bE= +github.com/morph-l2/go-ethereum v1.10.14-0.20241028101924-8c247ffe3315 h1:egBq7X488cY3PMSecpyf34H6zqwix0WwcDzcCOeKlYU= +github.com/morph-l2/go-ethereum v1.10.14-0.20241028101924-8c247ffe3315/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= diff --git a/node/core/batch.go b/node/core/batch.go index e463f5f4a..2ecb561ba 100644 --- a/node/core/batch.go +++ b/node/core/batch.go @@ -7,6 +7,8 @@ import ( "fmt" "math/big" + "morph-l2/node/types" + "github.com/morph-l2/go-ethereum/accounts/abi/bind" "github.com/morph-l2/go-ethereum/common" eth "github.com/morph-l2/go-ethereum/core/types" @@ -14,8 +16,6 @@ import ( "github.com/morph-l2/go-ethereum/crypto/bls12381" "github.com/tendermint/tendermint/l2node" tmtypes "github.com/tendermint/tendermint/types" - - "morph-l2/node/types" ) type BatchingCache struct { @@ -25,7 +25,6 @@ type BatchingCache struct { // accumulated batch data batchData *types.BatchData totalL1MessagePopped uint64 - skippedBitmap []*big.Int postStateRoot common.Hash withdrawRoot common.Hash @@ -39,7 +38,6 @@ type BatchingCache struct { currentTxs tmtypes.Txs currentL1TxsHashes []common.Hash totalL1MessagePoppedAfterCurBlock uint64 - skippedBitmapAfterCurBlock []*big.Int currentStateRoot common.Hash currentWithdrawRoot common.Hash currentBlockBytes []byte @@ -65,7 +63,6 @@ func (bc *BatchingCache) ClearCurrent() { bc.currentTxs = nil bc.currentL1TxsHashes = nil bc.currentBlockContext = nil - bc.skippedBitmapAfterCurBlock = nil bc.totalL1MessagePoppedAfterCurBlock = 0 bc.currentStateRoot = common.Hash{} bc.currentWithdrawRoot = common.Hash{} @@ -103,8 +100,6 @@ func (e *Executor) CalculateCapWithProposalBlock(currentBlockBytes []byte, curre } } - // skipped L1 message bitmap, an array of 256-bit bitmaps - var skippedBitmap []*big.Int var txsPayload []byte var l1TxHashes []common.Hash var totalL1MessagePopped = parentBatchHeader.TotalL1MessagePopped @@ -129,7 +124,7 @@ func (e *Executor) CalculateCapWithProposalBlock(currentBlockBytes []byte, curre } totalL1MessagePoppedBefore := totalL1MessagePopped - txsPayload, l1TxHashes, totalL1MessagePopped, skippedBitmap, l2TxNum, err = ParsingTxs(transactions[i], parentBatchHeader.TotalL1MessagePopped, totalL1MessagePoppedBefore, skippedBitmap) + txsPayload, l1TxHashes, totalL1MessagePopped, l2TxNum, err = ParsingTxs(transactions[i], totalL1MessagePoppedBefore) if err != nil { return false, err } @@ -151,7 +146,6 @@ func (e *Executor) CalculateCapWithProposalBlock(currentBlockBytes []byte, curre } e.batchingCache.parentBatchHeader = parentBatchHeader - e.batchingCache.skippedBitmap = skippedBitmap header, err := e.l2Client.HeaderByNumber(context.Background(), big.NewInt(int64(lastHeightBeforeCurrentBatch))) if err != nil { return false, err @@ -194,14 +188,6 @@ func (e *Executor) SealBatch() ([]byte, []byte, error) { return nil, nil, errors.New("failed to seal batch. No data found in batch cache") } - // compute skipped bitmap - skippedL1MessageBitmapBytes := make([]byte, len(e.batchingCache.skippedBitmap)*32) - for ii, num := range e.batchingCache.skippedBitmap { - bz := num.Bytes() - padding := 32 - len(bz) - copy(skippedL1MessageBitmapBytes[32*ii+padding:], bz) - } - sidecar, err := types.EncodeTxsPayloadToBlob(e.batchingCache.batchData.TxsPayload()) if err != nil { return nil, nil, err @@ -216,10 +202,23 @@ func (e *Executor) SealBatch() ([]byte, []byte, error) { return nil, nil, fmt.Errorf("failed to get sequencerSetVerifyHash, err: %w", err) } + block, err := wrappedBlockFromBytes(e.batchingCache.currentBlockBytes) + if err != nil { + return nil, nil, err + } + l1MessagePopped := e.batchingCache.totalL1MessagePopped - e.batchingCache.parentBatchHeader.TotalL1MessagePopped + var skippedL1MessageBitmap []byte + if block.Timestamp < e.UpgradeBatchTime { + e.logger.Info("waiting upgrade batch time", "upgradeBatchTime", e.UpgradeBatchTime, "current block time", block.Timestamp, "remaining seconds", e.UpgradeBatchTime-block.Timestamp) + if l1MessagePopped > 0 { // 32 zero bytes when before upgrading and has L1 message in batch + skippedL1MessageBitmap = make([]byte, 32) + } + } + batchHeader := types.BatchHeader{ Version: 0, BatchIndex: e.batchingCache.parentBatchHeader.BatchIndex + 1, - L1MessagePopped: e.batchingCache.totalL1MessagePopped - e.batchingCache.parentBatchHeader.TotalL1MessagePopped, + L1MessagePopped: l1MessagePopped, TotalL1MessagePopped: e.batchingCache.totalL1MessagePopped, DataHash: e.batchingCache.batchData.DataHash(), BlobVersionedHash: blobHashes[0], // currently we only have one blob @@ -228,20 +227,20 @@ func (e *Executor) SealBatch() ([]byte, []byte, error) { WithdrawalRoot: e.batchingCache.withdrawRoot, SequencerSetVerifyHash: sequencerSetVerifyHash, ParentBatchHash: e.batchingCache.parentBatchHeader.Hash(), - SkippedL1MessageBitmap: skippedL1MessageBitmapBytes, + SkippedL1MessageBitmap: skippedL1MessageBitmap, } e.batchingCache.sealedBatchHeader = &batchHeader e.batchingCache.sealedSidecar = sidecar batchHash := e.batchingCache.sealedBatchHeader.Hash() e.logger.Info("Sealed batch header", "batchHash", batchHash.Hex()) - e.logger.Info(fmt.Sprintf("===batchIndex: %d \n===L1MessagePopped: %d \n===TotalL1MessagePopped: %d \n===dataHash: %x \n===blockNum: %d \n===ParentBatchHash: %x \n===SkippedL1MessageBitmap: %x \n", + e.logger.Info(fmt.Sprintf("===batchIndex: %d \n===L1MessagePopped: %d \n===TotalL1MessagePopped: %d \n===dataHash: %x \n===blockNum: %d \n===SkippedL1MessageBitmap: %s \n===ParentBatchHash: %x \n", batchHeader.BatchIndex, batchHeader.L1MessagePopped, batchHeader.TotalL1MessagePopped, batchHeader.DataHash, e.batchingCache.batchData.BlockNum(), - batchHeader.ParentBatchHash, - batchHeader.SkippedL1MessageBitmap)) + batchHeader.SkippedL1MessageBitmap, + batchHeader.ParentBatchHash)) blockContexts, _ := e.batchingCache.batchData.Encode() e.logger.Info(fmt.Sprintf("===blockContexts: %x \n", blockContexts)) @@ -320,12 +319,11 @@ func (e *Executor) CommitBatch(currentBlockBytes []byte, currentTxs tmtypes.Txs, e.batchingCache.sealedBatchHeader = nil e.batchingCache.sealedSidecar = nil - _, _, totalL1MessagePopped, skippedBitmap, _, err := ParsingTxs(e.batchingCache.currentTxs, e.batchingCache.totalL1MessagePopped, e.batchingCache.totalL1MessagePopped, nil) + _, _, totalL1MessagePopped, _, err := ParsingTxs(e.batchingCache.currentTxs, e.batchingCache.totalL1MessagePopped) if err != nil { return err } e.batchingCache.totalL1MessagePopped = totalL1MessagePopped - e.batchingCache.skippedBitmap = skippedBitmap e.batchingCache.postStateRoot = e.batchingCache.currentStateRoot e.batchingCache.withdrawRoot = e.batchingCache.currentWithdrawRoot e.batchingCache.lastPackedBlockHeight = curHeight @@ -376,7 +374,6 @@ func (e *Executor) PackCurrentBlock(currentBlockBytes []byte, currentTxs tmtypes e.batchingCache.batchData = types.NewBatchData() } e.batchingCache.batchData.Append(e.batchingCache.currentBlockContext, e.batchingCache.currentTxsPayload, e.batchingCache.currentL1TxsHashes) - e.batchingCache.skippedBitmap = e.batchingCache.skippedBitmapAfterCurBlock e.batchingCache.totalL1MessagePopped = e.batchingCache.totalL1MessagePoppedAfterCurBlock e.batchingCache.withdrawRoot = e.batchingCache.currentWithdrawRoot e.batchingCache.postStateRoot = e.batchingCache.currentStateRoot @@ -392,7 +389,7 @@ func (e *Executor) BatchHash(batchHeaderBytes []byte) ([]byte, error) { } func (e *Executor) setCurrentBlock(currentBlockBytes []byte, currentTxs tmtypes.Txs) error { - currentTxsPayload, curL1TxsHashes, totalL1MessagePopped, skippedBitmap, l2TxNum, err := ParsingTxs(currentTxs, e.batchingCache.parentBatchHeader.TotalL1MessagePopped, e.batchingCache.totalL1MessagePopped, e.batchingCache.skippedBitmap) + currentTxsPayload, curL1TxsHashes, totalL1MessagePopped, l2TxNum, err := ParsingTxs(currentTxs, e.batchingCache.totalL1MessagePopped) if err != nil { return err } @@ -408,7 +405,6 @@ func (e *Executor) setCurrentBlock(currentBlockBytes []byte, currentTxs tmtypes. e.batchingCache.currentTxs = currentTxs e.batchingCache.currentL1TxsHashes = curL1TxsHashes e.batchingCache.totalL1MessagePoppedAfterCurBlock = totalL1MessagePopped - e.batchingCache.skippedBitmapAfterCurBlock = skippedBitmap e.batchingCache.currentStateRoot = curBlock.StateRoot e.batchingCache.currentWithdrawRoot = curBlock.WithdrawTrieRoot e.batchingCache.currentBlockBytes = currentBlockBytes @@ -416,21 +412,14 @@ func (e *Executor) setCurrentBlock(currentBlockBytes []byte, currentTxs tmtypes. return nil } -func ParsingTxs(transactions tmtypes.Txs, totalL1MessagePoppedBeforeTheBatch, totalL1MessagePoppedBefore uint64, skippedBitmapBefore []*big.Int) (txsPayload []byte, l1TxHashes []common.Hash, totalL1MessagePopped uint64, skippedBitmap []*big.Int, l2TxNum int, err error) { - // the first queue index that belongs to this batch - baseIndex := totalL1MessagePoppedBeforeTheBatch +func ParsingTxs(transactions tmtypes.Txs, totalL1MessagePoppedBefore uint64) (txsPayload []byte, l1TxHashes []common.Hash, totalL1MessagePopped uint64, l2TxNum int, err error) { // the next queue index that we need to process nextIndex := totalL1MessagePoppedBefore - skippedBitmap = make([]*big.Int, len(skippedBitmapBefore)) - for i, bm := range skippedBitmapBefore { - skippedBitmap[i] = new(big.Int).SetBytes(bm.Bytes()) - } - for i, txBz := range transactions { var tx eth.Transaction if err = tx.UnmarshalBinary(txBz); err != nil { - return nil, nil, 0, nil, 0, fmt.Errorf("transaction %d is not valid: %v", i, err) + return nil, nil, 0, 0, fmt.Errorf("transaction %d is not valid: %v", i, err) } if isL1MessageTxType(txBz) { @@ -439,25 +428,7 @@ func ParsingTxs(transactions tmtypes.Txs, totalL1MessagePoppedBeforeTheBatch, to currentIndex := tx.L1MessageQueueIndex() if currentIndex < nextIndex { - return nil, nil, 0, nil, 0, fmt.Errorf("unexpected batch payload, expected queue index: %d, got: %d. transaction hash: %v", nextIndex, currentIndex, tx.Hash()) - } - - // mark skipped messages - for skippedIndex := nextIndex; skippedIndex < currentIndex; skippedIndex++ { - quo := int((skippedIndex - baseIndex) / 256) - rem := int((skippedIndex - baseIndex) % 256) - for len(skippedBitmap) <= quo { - bitmap := big.NewInt(0) - skippedBitmap = append(skippedBitmap, bitmap) - } - skippedBitmap[quo].SetBit(skippedBitmap[quo], rem, 1) - } - - // process included message - quo := int((currentIndex - baseIndex) / 256) - for len(skippedBitmap) <= quo { - bitmap := big.NewInt(0) - skippedBitmap = append(skippedBitmap, bitmap) + return nil, nil, 0, 0, fmt.Errorf("unexpected batch payload, expected queue index: %d, got: %d. transaction hash: %v", nextIndex, currentIndex, tx.Hash()) } nextIndex = currentIndex + 1 @@ -524,9 +495,17 @@ func (e *Executor) ConvertBlsData(blsData l2node.BlsData) (*eth.BatchSignature, return &bs, nil } -func heightFromBCBytes(blockBytes []byte) (uint64, error) { +func wrappedBlockFromBytes(blockBytes []byte) (*types.WrappedBlock, error) { var curBlock = new(types.WrappedBlock) if err := curBlock.UnmarshalBinary(blockBytes); err != nil { + return nil, err + } + return curBlock, nil +} + +func heightFromBCBytes(blockBytes []byte) (uint64, error) { + curBlock, err := wrappedBlockFromBytes(blockBytes) + if err != nil { return 0, err } return curBlock.Number, nil diff --git a/node/core/config.go b/node/core/config.go index 5457b2986..f14d66488 100644 --- a/node/core/config.go +++ b/node/core/config.go @@ -22,6 +22,11 @@ import ( "morph-l2/node/types" ) +var ( + MainnetUpgradeBatchTime uint64 = 2000 + HoleskyUpgradeBatchTime uint64 = 350000 +) + type Config struct { L2 *types.L2Config `json:"l2"` L2CrossDomainMessengerAddress common.Address `json:"cross_domain_messenger_address"` @@ -29,6 +34,7 @@ type Config struct { GovAddress common.Address `json:"gov_address"` L2StakingAddress common.Address `json:"l2staking_address"` MaxL1MessageNumPerBlock uint64 `json:"max_l1_message_num_per_block"` + UpgradeBatchTime uint64 `json:"upgrade_batch_time"` DevSequencer bool `json:"dev_sequencer"` Logger tmlog.Logger `json:"logger"` } @@ -151,5 +157,16 @@ func (c *Config) SetCliContext(ctx *cli.Context) error { c.DevSequencer = ctx.GlobalBool(flags.DevSequencer.Name) } + // setup batch upgrade index + switch { + case ctx.GlobalIsSet(flags.MainnetFlag.Name): + c.UpgradeBatchTime = MainnetUpgradeBatchTime + case ctx.GlobalIsSet(flags.HoleskyFlag.Name): + c.UpgradeBatchTime = HoleskyUpgradeBatchTime + case ctx.GlobalIsSet(flags.UpgradeBatchTime.Name): + c.UpgradeBatchTime = ctx.GlobalUint64(flags.UpgradeBatchTime.Name) + logger.Info("set UpgradeBatchTime: ", ctx.GlobalUint64(flags.UpgradeBatchTime.Name)) + } + return nil } diff --git a/node/core/executor.go b/node/core/executor.go index 27fad5423..90f97e253 100644 --- a/node/core/executor.go +++ b/node/core/executor.go @@ -51,8 +51,9 @@ type Executor struct { isSequencer bool devSequencer bool - rollupABI *abi.ABI - batchingCache *BatchingCache + UpgradeBatchTime uint64 + rollupABI *abi.ABI + batchingCache *BatchingCache logger tmlog.Logger metrics *Metrics @@ -119,6 +120,7 @@ func NewExecutor(newSyncFunc NewSyncerFunc, config *Config, tmPubKey crypto.PubK devSequencer: config.DevSequencer, rollupABI: rollupAbi, batchingCache: NewBatchingCache(), + UpgradeBatchTime: config.UpgradeBatchTime, logger: logger, metrics: PrometheusMetrics("morphnode"), } @@ -195,7 +197,6 @@ func (e *Executor) RequestBlockData(height int64) (txs [][]byte, blockMeta []byt NextL1MessageIndex: l2Block.NextL1MessageIndex, Hash: l2Block.Hash, CollectedL1TxHashes: collectedL1TxHashes, - SkippedL1Txs: l2Block.SkippedTxs, } blockMeta, err = wb.MarshalBinary() txs = l2Block.Transactions @@ -239,7 +240,6 @@ func (e *Executor) CheckBlockData(txs [][]byte, metaData []byte) (valid bool, er WithdrawTrieRoot: wrappedBlock.WithdrawTrieRoot, NextL1MessageIndex: wrappedBlock.NextL1MessageIndex, Hash: wrappedBlock.Hash, - SkippedTxs: wrappedBlock.SkippedL1Txs, Transactions: txs, } @@ -306,7 +306,6 @@ func (e *Executor) DeliverBlock(txs [][]byte, metaData []byte, consensusData l2n LogsBloom: wrappedBlock.LogsBloom, WithdrawTrieRoot: wrappedBlock.WithdrawTrieRoot, NextL1MessageIndex: wrappedBlock.NextL1MessageIndex, - SkippedTxs: wrappedBlock.SkippedL1Txs, Hash: wrappedBlock.Hash, Transactions: txs, diff --git a/node/core/l1_message.go b/node/core/l1_message.go index 207f3dfaf..83a7ec7c1 100644 --- a/node/core/l1_message.go +++ b/node/core/l1_message.go @@ -19,11 +19,10 @@ func (e *Executor) updateNextL1MessageIndex(l2Block *catalyst.ExecutableL2Data) // validateL1Messages has the constraints // 1. all the collected L1 messages belonged to the given L1TxHash are exist. // 2. the collected L1 messages belonged to the given L1TxHash are sequenced correctly. -// 3. the L1 messages from the block.Transactions are sorted correctly(queueIndex increases but does not have to be continuous). +// 3. the L1 messages from the block.Transactions are sorted correctly. // 4. the L1 message from the block.Transactions must be one of the collected L1Messages. // 5. all the L1 messages from the block.Transactions must precede other normal L2 transactions. -// 6. the block.NextL1MessageIndex MUST be greater the queue index of the last involved L1Message in the block. -// 7. the skipped transactions from ExecutableL2Data extracted Must be the same as the ones from Layer1. +// 6. the block.NextL1MessageIndex MUST be equal to the queue index of the last involved L1Message in the block. func (e *Executor) validateL1Messages(block *catalyst.ExecutableL2Data, collectedL1TxHashes []common.Hash) error { nextExpectedIndex := e.nextL1MsgIndex @@ -54,7 +53,6 @@ func (e *Executor) validateL1Messages(block *catalyst.ExecutableL2Data, collecte nextExpectedIndex = e.nextL1MsgIndex L1SectionOver := false - var skipped eth.Transactions // check the L1 messages from block.Transactions for i, txBz := range block.Transactions { if !isL1MessageTxType(txBz) { @@ -74,7 +72,7 @@ func (e *Executor) validateL1Messages(block *catalyst.ExecutableL2Data, collecte currentTxQueueIndex := tx.L1MessageQueueIndex() // constraints 3 - if currentTxQueueIndex < nextExpectedIndex { + if currentTxQueueIndex != nextExpectedIndex { return types.ErrInvalidL1MessageOrder } @@ -96,44 +94,17 @@ func (e *Executor) validateL1Messages(block *catalyst.ExecutableL2Data, collecte e.logger.Error("wrong L1Message content", "index", currentTxQueueIndex) return types.ErrUnknownL1Message } - for queueIndex := nextExpectedIndex; queueIndex < currentTxQueueIndex; queueIndex++ { - skippedTx, ok := cache[queueIndex] - if !ok { - e.logger.Error("lost skipped L1Message collected", "queueIndex", queueIndex) - return types.ErrInvalidSkippedL1Message - } - skipped = append(skipped, skippedTx) - } nextExpectedIndex = currentTxQueueIndex + 1 } // constraints 6 - if block.NextL1MessageIndex < nextExpectedIndex { + if block.NextL1MessageIndex != nextExpectedIndex { e.logger.Error("wrong NextL1MessageIndex in the block", "indexOfLastInvolvedL1Tx", nextExpectedIndex-1, "block.NextL1MessageIndex", block.NextL1MessageIndex) return types.ErrWrongNextL1MessageIndex } - for queueIndex := nextExpectedIndex; queueIndex < block.NextL1MessageIndex; queueIndex++ { - skippedTx, ok := cache[queueIndex] - if !ok { - e.logger.Error("lost skipped L1Message collected", "queueIndex", queueIndex) - return types.ErrInvalidL1Message - } - skipped = append(skipped, skippedTx) - } - // constraints 7 - if len(skipped) != len(block.SkippedTxs) { - e.logger.Error("found wrong number of skipped txs", "expected skippedTx num", len(skipped), "actual", len(block.SkippedTxs)) - return types.ErrInvalidSkippedL1Message - } - for i, skippedTx := range skipped { - if skippedTx.Hash() != block.SkippedTxs[i].Tx.Hash() { - e.logger.Error("found wrong skipped tx hash", "expected skippedTx hash", skippedTx.Hash().Hex(), "actual", block.SkippedTxs[i].Tx.Hash()) - return types.ErrInvalidSkippedL1Message - } - } return nil } diff --git a/node/core/l1_message_test.go b/node/core/l1_message_test.go index cd4ae9a13..d425dbe1e 100644 --- a/node/core/l1_message_test.go +++ b/node/core/l1_message_test.go @@ -164,86 +164,26 @@ func TestValidateL1Messages(t *testing.T) { }) t.Run("constraint 6: testing block.NextL1MessageIndex", func(t *testing.T) { - to := common.BigToAddress(big.NewInt(1)) - skippedL1WithIndex10 := eth.L1MessageTx{ - QueueIndex: uint64(10), - Gas: 21000, - To: &to, - Value: big.NewInt(100), - Sender: common.BigToAddress(big.NewInt(int64(10))), - } - l1Message10 := types.L1Message{ - L1TxHash: common.BigToHash(big.NewInt(int64(10))), - L1MessageTx: skippedL1WithIndex10, - } - thisL1Reader := l1Reader.copy() - thisL1Reader.addL1Message(l1Message10) executor := Executor{ nextL1MsgIndex: 0, - l1MsgReader: thisL1Reader, + l1MsgReader: &l1Reader, logger: tmlog.NewTMLogger(tmlog.NewSyncWriter(os.Stdout)), } block := &catalyst.ExecutableL2Data{ - NextL1MessageIndex: 11, + NextL1MessageIndex: 10, Transactions: l1TxBytes, - SkippedTxs: []*eth.SkippedTransaction{ - {Tx: eth.NewTx(&skippedL1WithIndex10)}, - }, } - collectedL1TxHashesCopy := append(collectedL1TxHashes, common.BigToHash(big.NewInt(int64(10)))) - err := executor.validateL1Messages(block, collectedL1TxHashesCopy) + err := executor.validateL1Messages(block, collectedL1TxHashes) require.NoError(t, err) block = &catalyst.ExecutableL2Data{ - NextL1MessageIndex: 9, + NextL1MessageIndex: 11, Transactions: l1TxBytes, } err = executor.validateL1Messages(block, collectedL1TxHashes) require.ErrorIs(t, err, types.ErrWrongNextL1MessageIndex) }) - t.Run("constraint 7: invalid skipped L1 messages", func(t *testing.T) { - executor := Executor{ - nextL1MsgIndex: 0, - l1MsgReader: &l1Reader, - logger: tmlog.NewTMLogger(tmlog.NewSyncWriter(os.Stdout)), - } - - originTxs := block.Transactions[:] - l1TxBytes := make([][]byte, 0) - l1TxBytes = append(append(l1TxBytes, originTxs[:2]...), originTxs[3:]...) - - thisBlock := &catalyst.ExecutableL2Data{ - NextL1MessageIndex: 10, - Transactions: l1TxBytes, - } - - err := executor.validateL1Messages(thisBlock, collectedL1TxHashes) - require.EqualError(t, err, types.ErrInvalidSkippedL1Message.Error()) - - skippedTx := new(eth.Transaction) - err = skippedTx.UnmarshalBinary(originTxs[2]) - require.NoError(t, err) - thisBlock = &catalyst.ExecutableL2Data{ - NextL1MessageIndex: 10, - Transactions: l1TxBytes, - SkippedTxs: []*eth.SkippedTransaction{ - {Tx: skippedTx}, - }, - } - err = executor.validateL1Messages(thisBlock, collectedL1TxHashes) - require.NoError(t, err) - - thisBlock = &catalyst.ExecutableL2Data{ - NextL1MessageIndex: 10, - Transactions: l1TxBytes, - SkippedTxs: []*eth.SkippedTransaction{ - {Tx: skippedTx}, - }, - } - err = executor.validateL1Messages(thisBlock, collectedL1TxHashes) - require.NoError(t, err) - }) } var _ types.L1MessageReader = (*testL1MsgReader)(nil) diff --git a/node/derivation/batch_info.go b/node/derivation/batch_info.go index 8b55ed92b..17d4fe88a 100644 --- a/node/derivation/batch_info.go +++ b/node/derivation/batch_info.go @@ -78,7 +78,10 @@ func (bi *BatchInfo) TxNum() uint64 { func (bi *BatchInfo) ParseBatch(batch geth.RPCRollupBatch) error { bi.root = batch.PostStateRoot bi.withdrawalRoot = batch.WithdrawRoot - bi.skippedL1MessageBitmap = new(big.Int).SetBytes(batch.SkippedL1MessageBitmap[:]) + // If skipMap is zero value, there are no msgs that can be skipped + if len(batch.SkippedL1MessageBitmap[:]) != 0 { + bi.skippedL1MessageBitmap = new(big.Int).SetBytes(batch.SkippedL1MessageBitmap[:]) + } bi.version = uint64(batch.Version) tq := newTxQueue() for _, blob := range batch.Sidecar.Blobs { diff --git a/node/derivation/derivation.go b/node/derivation/derivation.go index ae0beb7ac..5fe76e292 100644 --- a/node/derivation/derivation.go +++ b/node/derivation/derivation.go @@ -10,6 +10,7 @@ import ( "time" "github.com/morph-l2/go-ethereum" + "github.com/morph-l2/go-ethereum/accounts/abi" "github.com/morph-l2/go-ethereum/accounts/abi/bind" "github.com/morph-l2/go-ethereum/common" eth "github.com/morph-l2/go-ethereum/core/types" @@ -46,6 +47,9 @@ type Derivation struct { l1BeaconClient *L1BeaconClient L2ToL1MessagePasser *bindings.L2ToL1MessagePasser + rollupABI *abi.ABI + legacyRollupABI *abi.ABI // before remove skipMap + db Database cancel context.CancelFunc @@ -81,6 +85,14 @@ func NewDerivationClient(ctx context.Context, cfg *Config, syncer *sync.Syncer, if err != nil { return nil, err } + rollupAbi, err := bindings.RollupMetaData.GetAbi() + if err != nil { + return nil, err + } + legacyRollupAbi, err := types.LegacyRollupMetaData.GetAbi() + if err != nil { + return nil, err + } ctx, cancel := context.WithCancel(ctx) logger = logger.With("module", "derivation") metrics := PrometheusMetrics("morphnode") @@ -102,6 +114,8 @@ func NewDerivationClient(ctx context.Context, cfg *Config, syncer *sync.Syncer, syncer: syncer, validator: validator, rollup: rollup, + rollupABI: rollupAbi, + legacyRollupABI: legacyRollupAbi, logger: logger, RollupContractAddress: cfg.RollupContractAddress, confirmations: cfg.L1.Confirmations, @@ -263,28 +277,10 @@ func (d *Derivation) fetchRollupDataByTxHash(txHash common.Hash, blockNumber uin if pending { return nil, errors.New("pending transaction") } - abi, err := bindings.RollupMetaData.GetAbi() + batch, err := d.UnPackData(tx.Data()) if err != nil { return nil, err } - if !bytes.Equal(abi.Methods["commitBatch"].ID, tx.Data()[:4]) { - return nil, types.ErrNotCommitBatchTx - } - args, err := abi.Methods["commitBatch"].Inputs.Unpack(tx.Data()[4:]) - if err != nil { - return nil, fmt.Errorf("submitBatches Unpack error:%v", err) - } - - rollupBatchData := args[0].(struct { - Version uint8 "json:\"version\"" - ParentBatchHeader []uint8 "json:\"parentBatchHeader\"" - BlockContexts []uint8 "json:\"blockContexts\"" - SkippedL1MessageBitmap []uint8 "json:\"skippedL1MessageBitmap\"" - PrevStateRoot [32]uint8 "json:\"prevStateRoot\"" - PostStateRoot [32]uint8 "json:\"postStateRoot\"" - WithdrawalRoot [32]uint8 "json:\"withdrawalRoot\"" - }) - // query blob block, err := d.l1Client.BlockByNumber(d.ctx, big.NewInt(int64(blockNumber))) if err != nil { @@ -304,18 +300,7 @@ func (d *Derivation) fetchRollupDataByTxHash(txHash common.Hash, blockNumber uin return nil, fmt.Errorf("getBlockSidecar error:%v", err) } } - - batch := geth.RPCRollupBatch{ - Version: uint(rollupBatchData.Version), - ParentBatchHeader: rollupBatchData.ParentBatchHeader, - BlockContexts: rollupBatchData.BlockContexts, - SkippedL1MessageBitmap: rollupBatchData.SkippedL1MessageBitmap, - PrevStateRoot: common.BytesToHash(rollupBatchData.PrevStateRoot[:]), - PostStateRoot: common.BytesToHash(rollupBatchData.PostStateRoot[:]), - WithdrawRoot: common.BytesToHash(rollupBatchData.WithdrawalRoot[:]), - Sidecar: bts, - } - + batch.Sidecar = bts rollupData, err := d.parseBatch(batch) if err != nil { d.logger.Error("parse batch failed", "txNonce", tx.Nonce(), "txHash", txHash, @@ -328,6 +313,58 @@ func (d *Derivation) fetchRollupDataByTxHash(txHash common.Hash, blockNumber uin return rollupData, nil } +func (d *Derivation) UnPackData(data []byte) (geth.RPCRollupBatch, error) { + var batch geth.RPCRollupBatch + if bytes.Equal(d.rollupABI.Methods["commitBatch"].ID, data[:4]) { + args, err := d.rollupABI.Methods["commitBatch"].Inputs.Unpack(data[4:]) + if err != nil { + return batch, fmt.Errorf("submitBatches Unpack error:%v", err) + } + rollupBatchData := args[0].(struct { + Version uint8 "json:\"version\"" + ParentBatchHeader []uint8 "json:\"parentBatchHeader\"" + BlockContexts []uint8 "json:\"blockContexts\"" + PrevStateRoot [32]uint8 "json:\"prevStateRoot\"" + PostStateRoot [32]uint8 "json:\"postStateRoot\"" + WithdrawalRoot [32]uint8 "json:\"withdrawalRoot\"" + }) + batch = geth.RPCRollupBatch{ + Version: uint(rollupBatchData.Version), + ParentBatchHeader: rollupBatchData.ParentBatchHeader, + BlockContexts: rollupBatchData.BlockContexts, + PrevStateRoot: common.BytesToHash(rollupBatchData.PrevStateRoot[:]), + PostStateRoot: common.BytesToHash(rollupBatchData.PostStateRoot[:]), + WithdrawRoot: common.BytesToHash(rollupBatchData.WithdrawalRoot[:]), + } + } else if bytes.Equal(d.legacyRollupABI.Methods["commitBatch"].ID, data[:4]) { + args, err := d.legacyRollupABI.Methods["commitBatch"].Inputs.Unpack(data[4:]) + if err != nil { + return batch, fmt.Errorf("submitBatches Unpack error:%v", err) + } + rollupBatchData := args[0].(struct { + Version uint8 "json:\"version\"" + ParentBatchHeader []uint8 "json:\"parentBatchHeader\"" + BlockContexts []uint8 "json:\"blockContexts\"" + SkippedL1MessageBitmap []uint8 "json:\"skippedL1MessageBitmap\"" + PrevStateRoot [32]uint8 "json:\"prevStateRoot\"" + PostStateRoot [32]uint8 "json:\"postStateRoot\"" + WithdrawalRoot [32]uint8 "json:\"withdrawalRoot\"" + }) + batch = geth.RPCRollupBatch{ + Version: uint(rollupBatchData.Version), + ParentBatchHeader: rollupBatchData.ParentBatchHeader, + BlockContexts: rollupBatchData.BlockContexts, + SkippedL1MessageBitmap: rollupBatchData.SkippedL1MessageBitmap, + PrevStateRoot: common.BytesToHash(rollupBatchData.PrevStateRoot[:]), + PostStateRoot: common.BytesToHash(rollupBatchData.PostStateRoot[:]), + WithdrawRoot: common.BytesToHash(rollupBatchData.WithdrawalRoot[:]), + } + } else { + return batch, types.ErrNotCommitBatchTx + } + return batch, nil +} + func (d *Derivation) parseBatch(batch geth.RPCRollupBatch) (*BatchInfo, error) { parentBatchHeader, err := types.DecodeBatchHeader(batch.ParentBatchHeader) if err != nil { @@ -355,7 +392,7 @@ func (d *Derivation) handleL1Message(rollupData *BatchInfo, parentTotalL1Message totalL1MessagePopped += uint64(block.l1MsgNum) if len(l1Messages) > 0 { for _, l1Message := range l1Messages { - if rollupData.skippedL1MessageBitmap.Bit(int(l1Message.QueueIndex)-int(parentTotalL1MessagePopped)) == 1 { + if rollupData.skippedL1MessageBitmap != nil && rollupData.skippedL1MessageBitmap.Bit(int(l1Message.QueueIndex)-int(parentTotalL1MessagePopped)) == 1 { continue } transaction := eth.NewTx(&l1Message.L1MessageTx) diff --git a/node/derivation/derivation_test.go b/node/derivation/derivation_test.go index e54a76543..6d16c0a0c 100644 --- a/node/derivation/derivation_test.go +++ b/node/derivation/derivation_test.go @@ -2,36 +2,45 @@ package derivation import ( "testing" + + "github.com/morph-l2/go-ethereum/common/hexutil" + "github.com/stretchr/testify/require" + + "morph-l2/bindings/bindings" + "morph-l2/node/types" +) + +var ( + errorData = "0x92f65af30000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e0000000000000000000000000000000000000000000000000000000000000098000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000006a02b8abfcc1aa740eb6330093a5ef9c1d09c39672c390926de6db9089554b620322b8abfcc1aa740eb6330093a5ef9c1d09c39672c390926de6db9089554b6203227ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d75700000000000000000000000000000000000000000000000000000000000006c00000000000000000000000000000000000000000000000000000000000000059000000000000000127000000000000000000000000000000006a5279896e0503ca805ecdb9208afa1ae78e214ceae183cf59fba3a8788e4598b0cd5e7bf4073160681199a5f107e15ec96c350840ebedb522a79c73615037b9000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004b11400000000000015520000000065e43bfb000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015530000000065e43c02000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015540000000065e43c08000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015550000000065e43c0f000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015560000000065e43c15000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015570000000065e43c1c000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015580000000065e43c22000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015590000000065e43c280000000000000000000000000000000000000000000000000000000000000000000000000098968000000000000000000000155a0000000065e43c2f0000000000000000000000000000000000000000000000000000000000000000000000000098968000000000000000000000155b0000000065e43c350000000000000000000000000000000000000000000000000000000000000000000000000098968000000000000000000000155c0000000065e43c3c0000000000000000000000000000000000000000000000000000000000000000000000000098968000000000000000000000155d0000000065e43c420000000000000000000000000000000000000000000000000000000000000000000000000098968000000000000000000000155e0000000065e43c490000000000000000000000000000000000000000000000000000000000000000000000000098968000000000000000000000155f0000000065e43c4f000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015600000000065e43c56000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015610000000065e43c5c000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015620000000065e43c62000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015630000000065e43c69000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015640000000065e43c6f000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015650000000065e43c7600000000000000000000000000000000000000000000000000000000000000000000000000989680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000001656c61193a9eca0201811fc18e071ee949910f696d7464fb3ed32ce9e9f022967f03962fb34c8533f0d01c13e808f4c000000000000000000000000000000000a066efeb662c0804b6c35a0be989a5fbd6a229261b12a176195772febca89e806e3fa2bebe19f95c7491af5afc7334e000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000001656c61193a9eca0201811fc18e071ee949910f696d7464fb3ed32ce9e9f022967f03962fb34c8533f0d01c13e808f4c000000000000000000000000000000000a066efeb662c0804b6c35a0be989a5fbd6a229261b12a176195772febca89e806e3fa2bebe19f95c7491af5afc7334e" + legacyData = "0xd63b3549000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000260292474b44bd10019728c36f474d43e57f666da244f857f10155d3b1df986d37700ba12e4dbe3733969348ffaf757b9225bdc7a3c48a5119f9a31256bbaa206fd6c0ab4151eda56c3b5b3f680e5100a43957ccb5aed62431468c550838e42f6df00000000000000000000000000000000000000000000000000000000000000f9000000000000008a98000000000000000000000000000001fbabd382d81484e2b0dc54e4d50d5767c312cd80d9c333217cc54d2a7395b06e650146a9e49d91463c241819423fac7ffa814a0a04473cace0e7a00b42da68ecd00a75fef5e27def60bbd05a3d76a3ca335df4d182a33e63c7f6c8e7890fe323f2292474b44bd10019728c36f474d43e57f666da244f857f10155d3b1df986d3776c0ab4151eda56c3b5b3f680e5100a43957ccb5aed62431468c550838e42f6dffed06619f2ec164eedb2121c02eda056059e58b8651d8b73785ab73f8aa3a555ac69de82ab218b900846f782176e21f0fa200cd8d8e8a70f64624e80d45d68a800000000000000000000000000000000000000000000000000000000000000000000000000003e000100000000000776ed00000000672b021600000000000000000000000000000000000000000000000000000000000f42400000000001c9c38003f9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000004e4600000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000675cfc328f9f2e79a51e499b2be44462270572fe000000000000000000000000b096665645994775eeba8aa114752d569734dcb40000000000000000000000003a587733d38e5487d2a7e81d84625f25c99ab3a1000000000000000000000000b6346ded94fc61b637763610d0c59846b77810800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000675cfc328f9f2e79a51e499b2be44462270572fe000000000000000000000000b096665645994775eeba8aa114752d569734dcb40000000000000000000000003a587733d38e5487d2a7e81d84625f25c99ab3a1000000000000000000000000b6346ded94fc61b637763610d0c59846b77810800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000b096665645994775eeba8aa114752d569734dcb40000000000000000000000003a587733d38e5487d2a7e81d84625f25c99ab3a1000000000000000000000000675cfc328f9f2e79a51e499b2be44462270572fe000000000000000000000000b6346ded94fc61b637763610d0c59846b778108000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000002c6d7a4e30d442f8d1acdc5068b604b75d1fc37673a07d51e0e56f3cbe28c36fa177a7d490b0147b89dbcc9e496f7d80000000000000000000000000000000001dddd9c85d12fb203286351cd1def0e5e830194ccc8ca494420adaa75db7613bf4cbe61fb316b8df2ec89eeda2b04e1" + data = "0x4a8d544f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000260292474b44bd10019728c36f474d43e57f666da244f857f10155d3b1df986d37700ba12e4dbe3733969348ffaf757b9225bdc7a3c48a5119f9a31256bbaa206fd6c0ab4151eda56c3b5b3f680e5100a43957ccb5aed62431468c550838e42f6df00000000000000000000000000000000000000000000000000000000000000f9000000000000008a98000000000000000000000000000001fbabd382d81484e2b0dc54e4d50d5767c312cd80d9c333217cc54d2a7395b06e650146a9e49d91463c241819423fac7ffa814a0a04473cace0e7a00b42da68ecd00a75fef5e27def60bbd05a3d76a3ca335df4d182a33e63c7f6c8e7890fe323f2292474b44bd10019728c36f474d43e57f666da244f857f10155d3b1df986d3776c0ab4151eda56c3b5b3f680e5100a43957ccb5aed62431468c550838e42f6dffed06619f2ec164eedb2121c02eda056059e58b8651d8b73785ab73f8aa3a555ac69de82ab218b900846f782176e21f0fa200cd8d8e8a70f64624e80d45d68a800000000000000000000000000000000000000000000000000000000000000000000000000003e000100000000000776ed00000000672b021600000000000000000000000000000000000000000000000000000000000f42400000000001c9c38003f9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000004e4600000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000675cfc328f9f2e79a51e499b2be44462270572fe000000000000000000000000b096665645994775eeba8aa114752d569734dcb40000000000000000000000003a587733d38e5487d2a7e81d84625f25c99ab3a1000000000000000000000000b6346ded94fc61b637763610d0c59846b77810800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000675cfc328f9f2e79a51e499b2be44462270572fe000000000000000000000000b096665645994775eeba8aa114752d569734dcb40000000000000000000000003a587733d38e5487d2a7e81d84625f25c99ab3a1000000000000000000000000b6346ded94fc61b637763610d0c59846b77810800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000b096665645994775eeba8aa114752d569734dcb40000000000000000000000003a587733d38e5487d2a7e81d84625f25c99ab3a1000000000000000000000000675cfc328f9f2e79a51e499b2be44462270572fe000000000000000000000000b6346ded94fc61b637763610d0c59846b778108000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000002c6d7a4e30d442f8d1acdc5068b604b75d1fc37673a07d51e0e56f3cbe28c36fa177a7d490b0147b89dbcc9e496f7d80000000000000000000000000000000001dddd9c85d12fb203286351cd1def0e5e830194ccc8ca494420adaa75db7613bf4cbe61fb316b8df2ec89eeda2b04e1" ) -func TestDecodeBatch(t *testing.T) { - //abi, err := bindings.RollupMetaData.GetAbi() - //require.NoError(t, err) - //hexData := "0x92f65af30000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e0000000000000000000000000000000000000000000000000000000000000098000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000006a02b8abfcc1aa740eb6330093a5ef9c1d09c39672c390926de6db9089554b620322b8abfcc1aa740eb6330093a5ef9c1d09c39672c390926de6db9089554b6203227ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d75700000000000000000000000000000000000000000000000000000000000006c00000000000000000000000000000000000000000000000000000000000000059000000000000000127000000000000000000000000000000006a5279896e0503ca805ecdb9208afa1ae78e214ceae183cf59fba3a8788e4598b0cd5e7bf4073160681199a5f107e15ec96c350840ebedb522a79c73615037b9000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004b11400000000000015520000000065e43bfb000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015530000000065e43c02000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015540000000065e43c08000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015550000000065e43c0f000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015560000000065e43c15000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015570000000065e43c1c000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015580000000065e43c22000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015590000000065e43c280000000000000000000000000000000000000000000000000000000000000000000000000098968000000000000000000000155a0000000065e43c2f0000000000000000000000000000000000000000000000000000000000000000000000000098968000000000000000000000155b0000000065e43c350000000000000000000000000000000000000000000000000000000000000000000000000098968000000000000000000000155c0000000065e43c3c0000000000000000000000000000000000000000000000000000000000000000000000000098968000000000000000000000155d0000000065e43c420000000000000000000000000000000000000000000000000000000000000000000000000098968000000000000000000000155e0000000065e43c490000000000000000000000000000000000000000000000000000000000000000000000000098968000000000000000000000155f0000000065e43c4f000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015600000000065e43c56000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015610000000065e43c5c000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015620000000065e43c62000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015630000000065e43c69000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015640000000065e43c6f000000000000000000000000000000000000000000000000000000000000000000000000009896800000000000000000000015650000000065e43c7600000000000000000000000000000000000000000000000000000000000000000000000000989680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000001656c61193a9eca0201811fc18e071ee949910f696d7464fb3ed32ce9e9f022967f03962fb34c8533f0d01c13e808f4c000000000000000000000000000000000a066efeb662c0804b6c35a0be989a5fbd6a229261b12a176195772febca89e806e3fa2bebe19f95c7491af5afc7334e000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000001656c61193a9eca0201811fc18e071ee949910f696d7464fb3ed32ce9e9f022967f03962fb34c8533f0d01c13e808f4c000000000000000000000000000000000a066efeb662c0804b6c35a0be989a5fbd6a229261b12a176195772febca89e806e3fa2bebe19f95c7491af5afc7334e" - //txData, err := hexutil.Decode(hexData) - //require.NoError(t, err) - //args, err := abi.Methods["commitBatch"].Inputs.Unpack(txData[4:]) - //require.NoError(t, err) - //rollupBatchData := args[0].(struct { - // Version uint8 "json:\"version\"" - // ParentBatchHeader []uint8 "json:\"parentBatchHeader\"" - // BlockContexts []uint8 "json:\"blockContexts\"" - // SkippedL1MessageBitmap []uint8 "json:\"skippedL1MessageBitmap\"" - // PrevStateRoot [32]uint8 "json:\"prevStateRoot\"" - // PostStateRoot [32]uint8 "json:\"postStateRoot\"" - // WithdrawalRoot [32]uint8 "json:\"withdrawalRoot\"" - //}) - // - //batch := eth.RPCRollupBatch{ - // Version: uint(rollupBatchData.Version), - // ParentBatchHeader: rollupBatchData.ParentBatchHeader, - // BlockContexts: rollupBatchData.BlockContexts, - // SkippedL1MessageBitmap: rollupBatchData.SkippedL1MessageBitmap, - // PrevStateRoot: common.BytesToHash(rollupBatchData.PrevStateRoot[:]), - // PostStateRoot: common.BytesToHash(rollupBatchData.PostStateRoot[:]), - // WithdrawRoot: common.BytesToHash(rollupBatchData.WithdrawalRoot[:]), - //} - //batchInfo := new(BatchInfo) - //err = batchInfo.ParseBatch(batch) - //require.NoError(t, err) +func TestUnPackData(t *testing.T) { + rollupAbi, err := bindings.RollupMetaData.GetAbi() + require.NoError(t, err) + legacyRollupAbi, err := types.LegacyRollupMetaData.GetAbi() + require.NoError(t, err) + d := Derivation{ + rollupABI: rollupAbi, + legacyRollupABI: legacyRollupAbi, + } + errorTxData, err := hexutil.Decode(errorData) + require.NoError(t, err) + _, err = d.UnPackData(errorTxData) + require.Error(t, err) + legacyTxData, err := hexutil.Decode(legacyData) + require.NoError(t, err) + legacyBatch, err := d.UnPackData(legacyTxData) + require.NoError(t, err) + LegacyBatchInfo := new(BatchInfo) + err = LegacyBatchInfo.ParseBatch(legacyBatch) + require.NoError(t, err) + txData, err := hexutil.Decode(data) + require.NoError(t, err) + batch, err := d.UnPackData(txData) + require.NoError(t, err) + batchInfo := new(BatchInfo) + err = batchInfo.ParseBatch(batch) + require.NoError(t, err) } diff --git a/node/flags/flags.go b/node/flags/flags.go index 7867b509b..c8fa45925 100644 --- a/node/flags/flags.go +++ b/node/flags/flags.go @@ -207,6 +207,27 @@ var ( Usage: "Number of blocks that we collect in a single eth_getLogs query", EnvVar: prefixEnvVar("DERIVATION_FETCH_BLOCK_RANGE"), } + + // Batch rules + UpgradeBatchTime = cli.Uint64Flag{ + Name: "upgrade.batchTime", + Usage: "Batch index at which the sequencers start to upgrade the batch format", + EnvVar: prefixEnvVar("UPGRADE_BATCH_TIME"), + } + MainnetFlag = cli.BoolFlag{ + Name: "mainnet", + Usage: "Morph mainnet", + } + HoleskyFlag = cli.BoolFlag{ + Name: "holesky", + Usage: "Morph Holesky", + } + + DerivationConfirmations = cli.Int64Flag{ + Name: "derivation.confirmations", + Usage: "The number of confirmations needed on L1 for finalization. If not set, the default value is l1.confirmations", + EnvVar: prefixEnvVar("DERIVATION_CONFIRMATIONS"), + } // Logger LogLevel = &cli.StringFlag{ Name: "log.level", @@ -306,6 +327,11 @@ var Flags = []cli.Flag{ DerivationFetchBlockRange, L1BeaconAddr, + // batch rules + UpgradeBatchTime, + MainnetFlag, + HoleskyFlag, + // logger LogLevel, LogFormat, diff --git a/node/go.mod b/node/go.mod index 2ffdd7572..dae5dc141 100644 --- a/node/go.mod +++ b/node/go.mod @@ -10,7 +10,7 @@ require ( github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/golang-lru v1.0.2 github.com/klauspost/compress v1.17.9 - github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 + github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e github.com/prometheus/client_golang v1.17.0 github.com/spf13/viper v1.13.0 github.com/stretchr/testify v1.9.0 diff --git a/node/go.sum b/node/go.sum index 452bdc251..2a6ffdcda 100644 --- a/node/go.sum +++ b/node/go.sum @@ -360,8 +360,8 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 h1:4+cbRSS4lacSIC81RXxvA04UHhGVC4SHVn+bKeqhPSM= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e h1:pV7z8mnNQr+JJO2CGUzwAlzjrPnZ0YlO92izBaq00Zs= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= github.com/morph-l2/tendermint v0.3.1 h1:yqyM3/p9sCNmFSsIFeIxS5RBgXHWqbtyNHx16I9cIZ0= github.com/morph-l2/tendermint v0.3.1/go.mod h1:TtCzp9l6Z6yDUiwv3TbqKqw8Q8RKp3fSz5+adO1/Y8w= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= diff --git a/node/types/batch.go b/node/types/batch.go index 19058cefd..12b95cd96 100644 --- a/node/types/batch.go +++ b/node/types/batch.go @@ -6,12 +6,18 @@ import ( "morph-l2/node/zstd" + "github.com/morph-l2/go-ethereum/accounts/abi/bind" "github.com/morph-l2/go-ethereum/common" "github.com/morph-l2/go-ethereum/common/hexutil" "github.com/morph-l2/go-ethereum/crypto" ) -var EmptyVersionedHash = common.HexToHash("0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014") +var ( + EmptyVersionedHash = common.HexToHash("0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014") + LegacyRollupMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorIncorrectBatchLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorNoBlockInBatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blockContexts\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"skippedL1MessageBitmap\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + } +) type BatchHeader struct { // Encoded in BatchHeaderV0Codec diff --git a/node/types/consensus_message.go b/node/types/consensus_message.go index c29985bb3..1fdbe491d 100644 --- a/node/types/consensus_message.go +++ b/node/types/consensus_message.go @@ -5,9 +5,8 @@ import ( "encoding/binary" "math/big" - "github.com/morph-l2/go-ethereum/core/types" - "github.com/morph-l2/go-ethereum/common" + "github.com/morph-l2/go-ethereum/core/types" "github.com/morph-l2/go-ethereum/rlp" ) @@ -89,7 +88,7 @@ type WrappedBlock struct { Hash common.Hash `json:"hash"` CollectedL1TxHashes []common.Hash `json:"l1TxHashes" rlp:"optional"` - SkippedL1Txs []*types.SkippedTransaction `json:"skippedL1Txs" rlp:"optional"` + SkippedL1Txs []*types.SkippedTransaction `json:"-" rlp:"optional"` BaseFee *big.Int `json:"baseFeePerGas" rlp:"optional"` } diff --git a/node/types/derivation.go b/node/types/derivation.go deleted file mode 100644 index c0304688a..000000000 --- a/node/types/derivation.go +++ /dev/null @@ -1,6 +0,0 @@ -package types - -type BatchBls struct { - //BlsData *eth.BLSData - BlockNumber uint64 // last blockNumber of batch -} diff --git a/ops/docker/.env b/ops/docker/.env index 98dff2a0f..238f50195 100644 --- a/ops/docker/.env +++ b/ops/docker/.env @@ -4,9 +4,10 @@ JWT_SECRET_PATH=/jwt-secret.txt NODE_DATA_DIR=/data L1_ETH_RPC=http://l1:8545 L1_BEACON_CHAIN_RPC=http://beacon-chain:3500 -L1_CROSS_DOMAIN_MESSENGER=0x5fc8d32690cc91d4c39d9d3abcbd16989f875707 -MORPH_PORTAL=0x0165878a594ca255338adfa4d48449f69242eb8f -MORPH_ROLLUP=0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6 +L1_CROSS_DOMAIN_MESSENGER=0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9 +MORPH_PORTAL=0xdc64a140aa3e981100a9beca4e685f962f0cf6c9 +MORPH_ROLLUP=0x0165878a594ca255338adfa4d48449f69242eb8f BUILD_GETH=l2-geth RUST_LOG=info -Proxy__L1Staking=0xa513e6e4b8f2a923d98304ec87f64353c4d5c853 +Proxy__L1Staking=0x5fc8d32690cc91d4c39d9d3abcbd16989f875707 +BATCH_UPGRADE_TIME=0 diff --git a/ops/docker/docker-compose-4nodes.yml b/ops/docker/docker-compose-4nodes.yml index cddec285c..cfdf27369 100644 --- a/ops/docker/docker-compose-4nodes.yml +++ b/ops/docker/docker-compose-4nodes.yml @@ -244,6 +244,7 @@ services: - MORPH_NODE_SYNC_DEPOSIT_CONTRACT_ADDRESS=${MORPH_PORTAL:-0x6900000000000000000000000000000000000001} - MORPH_NODE_L1_CONFIRMATIONS=0 - MORPH_NODE_SYNC_START_HEIGHT=${MORPH_NODE_SYNC_START_HEIGHT:-1} + - MORPH_NODE_UPGRADE_BATCH_TIME=${BATCH_UPGRADE_TIME} volumes: - "node_data_0:${NODE_DATA_DIR}" - "${PWD}/jwt-secret.txt:${JWT_SECRET_PATH}" @@ -277,6 +278,7 @@ services: - MORPH_NODE_SYNC_DEPOSIT_CONTRACT_ADDRESS=${MORPH_PORTAL:-0x6900000000000000000000000000000000000001} - MORPH_NODE_L1_CONFIRMATIONS=0 - MORPH_NODE_SYNC_START_HEIGHT=${MORPH_NODE_SYNC_START_HEIGHT:-1} + - MORPH_NODE_UPGRADE_BATCH_TIME=${BATCH_UPGRADE_TIME} volumes: - "node_data_1:${NODE_DATA_DIR}" - "${PWD}/jwt-secret.txt:${JWT_SECRET_PATH}" @@ -311,6 +313,7 @@ services: - MORPH_NODE_SYNC_DEPOSIT_CONTRACT_ADDRESS=${MORPH_PORTAL:-0x6900000000000000000000000000000000000001} - MORPH_NODE_L1_CONFIRMATIONS=0 - MORPH_NODE_SYNC_START_HEIGHT=${MORPH_NODE_SYNC_START_HEIGHT:-1} + - MORPH_NODE_UPGRADE_BATCH_TIME=${BATCH_UPGRADE_TIME} volumes: - "node_data_2:${NODE_DATA_DIR}" - "${PWD}/jwt-secret.txt:${JWT_SECRET_PATH}" @@ -345,6 +348,7 @@ services: - MORPH_NODE_SYNC_DEPOSIT_CONTRACT_ADDRESS=${MORPH_PORTAL:-0x6900000000000000000000000000000000000001} - MORPH_NODE_L1_CONFIRMATIONS=0 - MORPH_NODE_SYNC_START_HEIGHT=${MORPH_NODE_SYNC_START_HEIGHT:-1} + - MORPH_NODE_UPGRADE_BATCH_TIME=${BATCH_UPGRADE_TIME} volumes: - "node_data_3:${NODE_DATA_DIR}" - "${PWD}/jwt-secret.txt:${JWT_SECRET_PATH}" diff --git a/ops/l2-genesis/deploy-config/qanet-deploy-config.json b/ops/l2-genesis/deploy-config/qanet-deploy-config.json index 0f573d0e1..82ea5fcbf 100644 --- a/ops/l2-genesis/deploy-config/qanet-deploy-config.json +++ b/ops/l2-genesis/deploy-config/qanet-deploy-config.json @@ -14,8 +14,8 @@ "fundDevAccounts": false, "l1StartingBlockTag": "earliest", - "maxTxPerBlock": 10000, - "maxTxPayloadBytesPerBlock": 345000, + "maxTxPerBlock": 1000, + "maxTxPayloadBytesPerBlock": 122880, "gasPriceOracleOverhead": 2500, "gasPriceOracleScalar": 1000000000, diff --git a/ops/l2-genesis/go.mod b/ops/l2-genesis/go.mod index a950d67b7..277d2c777 100644 --- a/ops/l2-genesis/go.mod +++ b/ops/l2-genesis/go.mod @@ -6,7 +6,7 @@ replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3. require ( github.com/holiman/uint256 v1.2.4 - github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 + github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e github.com/stretchr/testify v1.9.0 github.com/urfave/cli v1.22.14 ) diff --git a/ops/l2-genesis/go.sum b/ops/l2-genesis/go.sum index 0a1a50c87..e073c4429 100644 --- a/ops/l2-genesis/go.sum +++ b/ops/l2-genesis/go.sum @@ -143,8 +143,8 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 h1:4+cbRSS4lacSIC81RXxvA04UHhGVC4SHVn+bKeqhPSM= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e h1:pV7z8mnNQr+JJO2CGUzwAlzjrPnZ0YlO92izBaq00Zs= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= diff --git a/ops/tools/go.mod b/ops/tools/go.mod index 887f69114..865fcdb43 100644 --- a/ops/tools/go.mod +++ b/ops/tools/go.mod @@ -5,7 +5,7 @@ go 1.22 replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3.1 require ( - github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 + github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e github.com/tendermint/tendermint v0.35.9 ) diff --git a/ops/tools/go.sum b/ops/tools/go.sum index 95dd6436f..a45f366e7 100644 --- a/ops/tools/go.sum +++ b/ops/tools/go.sum @@ -163,8 +163,8 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 h1:4+cbRSS4lacSIC81RXxvA04UHhGVC4SHVn+bKeqhPSM= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e h1:pV7z8mnNQr+JJO2CGUzwAlzjrPnZ0YlO92izBaq00Zs= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= github.com/morph-l2/tendermint v0.3.1 h1:yqyM3/p9sCNmFSsIFeIxS5RBgXHWqbtyNHx16I9cIZ0= github.com/morph-l2/tendermint v0.3.1/go.mod h1:TtCzp9l6Z6yDUiwv3TbqKqw8Q8RKp3fSz5+adO1/Y8w= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= diff --git a/oracle/go.mod b/oracle/go.mod index 8d86dcb74..074df471e 100644 --- a/oracle/go.mod +++ b/oracle/go.mod @@ -7,7 +7,7 @@ replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3. require ( github.com/go-kit/kit v0.12.0 github.com/morph-l2/externalsign v0.3.1 - github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 + github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e github.com/prometheus/client_golang v1.17.0 github.com/stretchr/testify v1.9.0 github.com/tendermint/tendermint v0.35.9 diff --git a/oracle/go.sum b/oracle/go.sum index 7d0b42448..a08b1aef8 100644 --- a/oracle/go.sum +++ b/oracle/go.sum @@ -173,12 +173,10 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/morph-l2/externalsign v0.3.0 h1:eVGON//ofO5eJSZvJQW+8HUeaGlg4seaS99SzS8GQc4= -github.com/morph-l2/externalsign v0.3.0/go.mod h1:b6NJ4GUiiG/gcSJsp3p8ExsIs4ZdphlrVALASnVoGJE= github.com/morph-l2/externalsign v0.3.1 h1:UYFDZFB0L85A4rDvuwLNBiGEi0kSmg9AZ2v8Q5O4dQo= github.com/morph-l2/externalsign v0.3.1/go.mod h1:b6NJ4GUiiG/gcSJsp3p8ExsIs4ZdphlrVALASnVoGJE= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 h1:4+cbRSS4lacSIC81RXxvA04UHhGVC4SHVn+bKeqhPSM= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e h1:pV7z8mnNQr+JJO2CGUzwAlzjrPnZ0YlO92izBaq00Zs= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= github.com/morph-l2/tendermint v0.3.1 h1:yqyM3/p9sCNmFSsIFeIxS5RBgXHWqbtyNHx16I9cIZ0= github.com/morph-l2/tendermint v0.3.1/go.mod h1:TtCzp9l6Z6yDUiwv3TbqKqw8Q8RKp3fSz5+adO1/Y8w= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= diff --git a/tx-submitter/go.mod b/tx-submitter/go.mod index 3ad0de4ce..1fada601d 100644 --- a/tx-submitter/go.mod +++ b/tx-submitter/go.mod @@ -7,7 +7,7 @@ replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3. require ( github.com/holiman/uint256 v1.2.4 github.com/morph-l2/externalsign v0.3.1 - github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 + github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e github.com/prometheus/client_golang v1.17.0 github.com/stretchr/testify v1.9.0 github.com/tendermint/tendermint v0.35.9 diff --git a/tx-submitter/go.sum b/tx-submitter/go.sum index b44394540..c6d21f1ad 100644 --- a/tx-submitter/go.sum +++ b/tx-submitter/go.sum @@ -162,12 +162,10 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/morph-l2/externalsign v0.3.0 h1:eVGON//ofO5eJSZvJQW+8HUeaGlg4seaS99SzS8GQc4= -github.com/morph-l2/externalsign v0.3.0/go.mod h1:b6NJ4GUiiG/gcSJsp3p8ExsIs4ZdphlrVALASnVoGJE= github.com/morph-l2/externalsign v0.3.1 h1:UYFDZFB0L85A4rDvuwLNBiGEi0kSmg9AZ2v8Q5O4dQo= github.com/morph-l2/externalsign v0.3.1/go.mod h1:b6NJ4GUiiG/gcSJsp3p8ExsIs4ZdphlrVALASnVoGJE= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625 h1:4+cbRSS4lacSIC81RXxvA04UHhGVC4SHVn+bKeqhPSM= -github.com/morph-l2/go-ethereum v1.10.14-0.20241021080617-0ff2a10a9625/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e h1:pV7z8mnNQr+JJO2CGUzwAlzjrPnZ0YlO92izBaq00Zs= +github.com/morph-l2/go-ethereum v1.10.14-0.20241105040223-5c7f1bb7073e/go.mod h1:sMJCfHOBzVRDkM2yF/Hy+oUk2rgC0CQZHTLs0cyzhhk= github.com/morph-l2/tendermint v0.3.1 h1:yqyM3/p9sCNmFSsIFeIxS5RBgXHWqbtyNHx16I9cIZ0= github.com/morph-l2/tendermint v0.3.1/go.mod h1:TtCzp9l6Z6yDUiwv3TbqKqw8Q8RKp3fSz5+adO1/Y8w= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= diff --git a/tx-submitter/services/pendingtx.go b/tx-submitter/services/pendingtx.go index d0f706c95..53276fb7a 100644 --- a/tx-submitter/services/pendingtx.go +++ b/tx-submitter/services/pendingtx.go @@ -169,12 +169,12 @@ func (pt *PendingTxs) IncQueryTimes(txHash common.Hash) { pt.txinfos[txHash] = TxInfo{tx: pt.txinfos[txHash].tx, queryTimes: pt.txinfos[txHash].queryTimes + 1, sendTime: pt.txinfos[txHash].sendTime} } -func (pt *PendingTxs) SetFailedStatus(index uint64) { +func (pt *PendingTxs) TrySetFailedBatchIndex(index uint64) { pt.mu.Lock() defer pt.mu.Unlock() // failed index must be less than pindex - if pt.failedIndex != nil || index >= pt.pindex { + if index > pt.pindex { return } @@ -231,9 +231,3 @@ func (pt *PendingTxs) ExistedIndex(index uint64) bool { return false } - -func (pt *PendingTxs) ResetFailedIndex(index uint64) { - pt.mu.Lock() - defer pt.mu.Unlock() - pt.failedIndex = &index -} diff --git a/tx-submitter/services/pendingtx_test.go b/tx-submitter/services/pendingtx_test.go new file mode 100644 index 000000000..71cb9ab76 --- /dev/null +++ b/tx-submitter/services/pendingtx_test.go @@ -0,0 +1,31 @@ +package services + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestSetFailedStatus(t *testing.T) { + // index 2 failed -> set failed index 2 success + pt := NewPendingTxs(nil, nil, nil) + pt.SetPindex(2) + require.Nil(t, pt.failedIndex) + pt.TrySetFailedBatchIndex(2) + require.NotNil(t, pt.failedIndex) + require.EqualValues(t, 2, *pt.failedIndex) + + // failed index =2 + // new failed index = 3 + // set failed index failed + pt = NewPendingTxs(nil, nil, nil) + failedIndex := uint64(2) + pt.failedIndex = &failedIndex + pt.TrySetFailedBatchIndex(3) + require.EqualValues(t, 2, *pt.failedIndex) + + // set failed index without pindex -> failed + pt = NewPendingTxs(nil, nil, nil) + pt.TrySetFailedBatchIndex(2) + require.Nil(t, pt.failedIndex) +} diff --git a/tx-submitter/services/rollup.go b/tx-submitter/services/rollup.go index d944b5bd4..4e4ef0ddd 100644 --- a/tx-submitter/services/rollup.go +++ b/tx-submitter/services/rollup.go @@ -332,7 +332,7 @@ func (r *Rollup) ProcessTx() error { // happening between RemoveRollupRestriction // and SetPindex in the rollup function r.rollupFinalizeMu.Lock() - r.pendingTxs.SetFailedStatus(index) + r.pendingTxs.TrySetFailedBatchIndex(index) r.rollupFinalizeMu.Unlock() } @@ -639,7 +639,16 @@ func (r *Rollup) rollup() error { } } - log.Info("batch info", "last_commit_batch", batchIndex-1, "batch_will_get", batchIndex) + var failedIndex uint64 + if r.pendingTxs.failedIndex != nil { + failedIndex = *r.pendingTxs.failedIndex + } + log.Info("batch index info", + "last_committed_batch_index", cindex, + "batch_index_will_get", batchIndex, + "pending_index", r.pendingTxs.pindex, + "failed_index", failedIndex, + ) if r.pendingTxs.ExistedIndex(batchIndex) { log.Info("batch index already committed", "index", batchIndex) return nil @@ -675,13 +684,12 @@ func (r *Rollup) rollup() error { return err } rollupBatch := bindings.IRollupBatchDataInput{ - Version: uint8(batch.Version), - ParentBatchHeader: batch.ParentBatchHeader, - BlockContexts: batch.BlockContexts, - SkippedL1MessageBitmap: batch.SkippedL1MessageBitmap, - PrevStateRoot: batch.PrevStateRoot, - PostStateRoot: batch.PostStateRoot, - WithdrawalRoot: batch.WithdrawRoot, + Version: uint8(batch.Version), + ParentBatchHeader: batch.ParentBatchHeader, + BlockContexts: batch.BlockContexts, + PrevStateRoot: batch.PrevStateRoot, + PostStateRoot: batch.PostStateRoot, + WithdrawalRoot: batch.WithdrawRoot, } // tip and cap @@ -702,9 +710,9 @@ func (r *Rollup) rollup() error { if r.pendingTxs.HaveFailed() { log.Warn("estimate gas err, wait failed tx fixed", "err", err, - "update_pooled_pending_index", cindex+1, + "try_update_pooled_pending_index", cindex+1, ) - r.pendingTxs.ResetFailedIndex(cindex + 1) + r.pendingTxs.TrySetFailedBatchIndex(cindex + 1) return nil }